zoukankan      html  css  js  c++  java
  • js获取本周、本月、本季、本年的第一天

    今天项目中要获取本周、本月、本季、本年的第一天,发现网上的方法或多或少都有问题,于是自己写了一个,亲测可用。

    同时回顾了一下js日期对象的知识,做个总结

    先上代码:

     1 /**
     2  * 获取指定日期的周的第一天、月的第一天、季的第一天、年的第一天
     3  * @param date new Date()形式,或是自定义参数的new Date()
     4  * @returns 返回值为格式化的日期,yy-mm-dd
     5  */
     6 //日期格式化,返回值形式为yy-mm-dd
     7 function timeFormat(date) {
     8     if (!date || typeof(date) === "string") {
     9         this.error("参数异常,请检查...");
    10     }
    11     var y = date.getFullYear(); //
    12     var m = date.getMonth() + 1; //
    13     var d = date.getDate(); //
    14 
    15     return y + "-" + m + "-" + d;
    16 }
    17 
    18 //获取这周的周一
    19 function getFirstDayOfWeek (date) {
    20 
    21     var weekday = date.getDay()||7; //获取星期几,getDay()返回值是 0(周日) 到 6(周六) 之间的一个整数。0||7为7,即weekday的值为1-7
    22 
    23     date.setDate(date.getDate()-weekday+1);//往前算(weekday-1)天,年份、月份会自动变化
    24     return timeFormat(date);
    25 }
    26 
    27 //获取当月第一天
    28 function getFirstDayOfMonth (date) {
    29     date.setDate(1);
    30     return timeFormat(date);
    31 }
    32 
    33 //获取当季第一天
    34 function getFirstDayOfSeason (date) {
    35     var month = date.getMonth();
    36     if(month <3 ){
    37         date.setMonth(0);
    38     }else if(2 < month && month < 6){
    39         date.setMonth(3);
    40     }else if(5 < month && month < 9){
    41         date.setMonth(6);
    42     }else if(8 < month && month < 11){
    43         date.setMonth(9);
    44     }
    45     date.setDate(1);
    46     return timeFormat(date);
    47 }
    48 
    49 //获取当年第一天
    50 function getFirstDayOfYear (date) {
    51     date.setDate(1);
    52     date.setMonth(0);
    53     return timeFormat(date);
    54 }

    getYear()返回年份与1900 年之间的差,如1994年返回94,而2009年则会显示109

    getFullYear()返回正确的年份,如2017

    getDay() 方法可返回表示星期的某一天的数字。返回值是 0(周日) 到 6(周六) 之间的一个整数。

    这里date.getDay()||7将返回值变成了1-7(对应周一到周日)。

    getMonth()的返回值比实际月份少1。即0-11表示1月到 12月。我们在打印出来的时候需要getMonth()+1 才会看到正确的月份

    同理setMonth(0)表示1月份

    setDate() 方法用于设置一个月的某一天。

    对于某个日期上加减天数来说,调用setDate()函数就可以了

    date.setDate(date.getDate()-n);//前n天的日期

    如果前n天的日期是上个月或是去年了,setDate()也会自动设置,会自动改变月份、年份,不需要人工判断

    函数输入参数date为new Date()形式

    var date=new Date();

    Date 对象自动使用当前的日期和时间作为其初始值。

    也可以自定义时间,参数形式有5种: 

    1)new Date("month dd,yyyy hh:mm:ss");

    2)new Date("month dd,yyyy"); 

    3)new Date(yyyy,mth,dd,hh,mm,ss); 

    4)new Date(yyyy,mth,dd); 

    5)new Date(ms); 

    具体使用如下:

    1 new Date("January 12,2006 22:19:35"); 
    2  
    3 new Date("January 12,2006"); 
    4  
    5 new Date(2006,0,12,22,19,35); 
    6  
    7 new Date(2006,0,12); 
    8  
    9 new Date(1137075575000);

    getFirstDayOfWeek、getFirstDayOfMonth等这几个函数在使用时要注意,一起使用的时候不能

    1 var date = new Date(2017,0,1,22,22,22);
    2        
    3 console.log("当前日期:",date);
    4 console.log("当前日期格式化:",timeFormat(date));
    5 console.log("本周第一天:",getFirstDayOfWeek(date));
    6 console.log("本月第一天:",getFirstDayOfMonth(date));
    7 console.log("本季第一天:",getFirstDayOfSeason(date));
    8 console.log("本年第一天:",getFirstDayOfYear(date));

    这样使用,因为 getFirstDayOfWeek(date) 函数直接是setDate的,这个date值已经发生了变化了,后面几个函数使用时已经不是最开始定义的date了,与我们的预期不符~(一开始就栽在这里了,明明感觉函数都对,输出值就是与预期不一样)

    要一起使用时最好每个参数都new Date()一下,以2017.1.1为例:

    1 console.log("当前日期:",new Date(2017,0,1));
    2 console.log("当前日期格式化:",timeFormat(new Date(2017,0,1)));
    3 console.log("本周第一天:",getFirstDayOfWeek(new Date(2017,0,1)));
    4 console.log("本月第一天:",getFirstDayOfMonth(new Date(2017,0,1)));
    5 console.log("本季第一天:",getFirstDayOfSeason(new Date(2017,0,1)));
    6 console.log("本年第一天:",getFirstDayOfYear(new Date(2017,0,1)));

    输出

    成功了~

  • 相关阅读:
    JVM视角:值传递or引用传递?【转】
    mybaits trim用法
    Collections.shuffle()用法
    api缓存
    接口开发
    Integer.parseInt()和这个Integer.valueOf()的详解【转】
    MyBatis 通过包含的jdbcType类型
    idea 相关设置
    idea快捷键
    equals 与 ==
  • 原文地址:https://www.cnblogs.com/wasabii/p/7756560.html
Copyright © 2011-2022 走看看