js内置对象之Date


js内置对象之Date

  Date对象:封装一个时间点,提供操作时间的API。Date对象中封装的是从1970年1月1日0点至今的毫秒数。

 

1、创建Date对象(4种)

  (1)创建Date对象同时获得当前系统时间,指的是客户端系统的当前时间

var now = new Date();

  (2)创建日期对象,同时自定义时间,形如:Date("yyyy/MM/dd[ hh:mm:ss]")

var date = new Date("1994/04/06 03:23:55");

  (3)创建日期对ixnag,同时自定义时间:由于计算机中日期MM从0开始计算,范围是0~11,使用时MM需要加1

var date = new Date(yyyy, MM, dd, hh, mm, ss);

  (4)复制一个对象

var oldDate = new Date("1994/04/06");
var newDate = new Date(oldDate.getTime());//参数可以是一个日期,也可以是一个毫秒数

 

 

2、日期API

  日期分量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds

  2.1 每个分量都有一对get和set方法

    getXXX()用于获取指定分量的值;setXXX()用于设置指定分量的值,可以自动调整时间进制。Day分量没有set方法,因为星期是根据日期换算出来的。

  2.2 分量命名规律

    年月日星期,后没有s,直接是英文;时分秒毫秒,后有s

  2.3 取值范围

    只有月中的日date分量是从1开始到31结束;其余都是从0开始,到进制最大量-1结束

getXXX() setXXX() 意义 范围 备注
date.getFullYear() date.setFullYear()    
date.getMonth() date.setMonth() 0~11

使用时get方法

获得的值需要+1

date.getDate() date.setDate() 1~31  
date.getDay() 星期 0~6  
date.getHours() date.setHours() 0~23  
date.getMinutes() date.setMinutes() 0~59  
date.getSeconds() date.setSeconds() 0~59  
date.getMilliseconds() date.setMilliseconds() 毫秒    

 

3、计算日期(2种)

   1)求时间差:

    日期-日期=毫秒差

    日期-毫秒数=毫秒数

  由于每个月的天数不一样,故此方法一般用于一个月之内的时间差计算。

  2)对日期的任意分量做计算:3布

    ①取分量:使用对应的get方法

    ②计算

    ③设置分量:使用对应的set方法

    简写:date.setXXX(date.getXXX()+n);

    set方法是直接修改原日期。

 

4、日期转字符串

  1) String(date):返回中国标准时间格式的字符串

  2)date.toLocaleString():返回客户端当地时间格式,包含日期和时间。

  3)date.toLocaleDateString():返回客户端当地时间格式,只包含日期部分

  4)date.toLocaleTimeString():返回客户端当地时间格式,仅包含时间部分

不足:①方法名太长,不利于记忆;②兼容性问题,不同浏览器输出的效果不一样

 

5、练习

  5.1 计算合同到期时间等

  要求:①创建Date对象保存员工入职日期;②合同有效期为3年,计算合同到期时间;③合同到期前,需要提前一个月续签。如果提前一月的续签时间刚好是周末,则需要提前到上一个周五,计算续签时间;④要求在续签时间前一周,向员工发出续签提醒,计算提醒时间。

//入职时间
var hireDate = new Date("2012/6/30");
//赋值对象给endDate
var endDate = new Date(hireDate.getTime());
endDate.setFullYear(endDate.getFullYear()+3);
//
var resumeDate = new Date(endDate.getTime());
resumeDate.setMonth(resumeDate.getMonth()-1);
if(resumeDate.getDay()==6){
    resumeDate.setDate(resumeDate.getDate()-1);
}
if(resumeDate.getDay()==0){
    resumeDate.setDate(resumeDate.getDate()-2);
}
var alertDate = new Date(resumeDate.getTime());
alertDate.setDate(alertDate.getDate()-7);
console.log("到期时间:"+endDate.toLocaleDateString());
console.log("续签时间:"+resumeDate.toLocaleDateString());
console.log("提醒时间:"+alertDate.toLocaleDateString());

 

  5.2 计算明天开始,任意工作日之后的日期

var now = new Date();
var days = 10;
for(var i=0;i<days;i++){
    /*if(now.getDay()==5){
        now.setDate(now.getDate()+2);
    }else if(now.getDay()==6){
        now.setDate(now.getDate()+1);
    }
    now.setDate(now.getDate()+1);*/
    
    //简写
    now.setDate(now.getDate() + (now.getDay()==5 ? 3 : now.getDay()==6 ? 2 : 1));
}
console.log(now.toLocaleDateString());

 

  5.3 自定义format方法,格式化日期

//返回形如“2017年3月2日 星期四 上午 11:12:31”
function format (date){
    var days = ["星期日","星期一","星期二","星期三","星期四","星期五","星期6"];
    //获取date的年份
    var year = date.getFullYear();
    //获取date的月份,将月份格式化成两位数保存
    var month = date.getMonth()<10 ? "0"+date.getMonth() : date.getMonth();
    //获取date的日期,将日期格式化成两位数保存
    var d = date.getDate()<10 ? "0"+date.getDate() : date.getDate();
    //从days数组中获得date的星期对应位置的星期名
    var day = days[date.getDay()];
    //获得date的小时,保存为两位数
    var hour = date.getHours();
    var am = hour<12 ? "上午" : "下午";
    hour = hour<12 ? hour : hour-12;
    var minute = date.getMinutes();
    var second = date.getSeconds();
    return year+"年"+month+"月"+d+"日 "+day+" "+am+" "+hour+":"+minute+":"+second;
}
console.log(format(new Date()));

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM