概述
- Date()对象是JS的原生时间库,以国际标准时间(UTC)1970/1/1 00:00:00作为时间的零点,可以表示的时间范围是前后个各1亿天,默认返回的都是
当前时区的时间。
Date()
- 返回一个代表当前时间的字符串。
Date() // 'Tue Feb 20 2024 11:33:41 GMT+0800 (中国标准时间)'
Date(2000, 1, 1) // 'Tue Feb 20 2024 11:37:03 GMT+0800 (中国标准时间)'
无论有没有参数,直接调用Date()总是返回当前时间。
构造函数
Date被当作构造函数使用,会返回一个Date对象的实例。如果不加参数,实例代表的就是当前时间。
new Date() // Tue Feb 20 2024 11:38:42 GMT+0800 (中国标准时间)
// 实例对象求值时都是调用valueOf,只有Date调用的是toString
// 以上代码等同于:
new Date().toString()
// 参数为毫秒
new Date(1378218728000) // Tue Sep 03 2013 22:32:08 GMT+0800 (中国标准时间)
// 参数为日期字符串
new Date('Feb 20, 2024') // Tue Feb 20 2024 00:00:00 GMT+0800 (中国标准时间)
// 参数为多个整数:年、月(从0开始)、日、时、分、秒、毫秒
new Date(2024, 1, 20, 11, 42, 30, 0) // Tue Feb 20 2024 11:42:30 GMT+0800 (中国标准时间)
// 参数为整数时至少要有2个参数(年和月),如果只有一个会被当作毫秒处理
new Date(2013) // Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间)
new Date(2024, 1) // Thu Feb 01 2024 00:00:00 GMT+0800 (中国标准时间)
- 参数为数字各个参数的取值范围:
- 年:使用4位年份。如果写成2位或1位,则加上1900。比如10则相当于1910年。
- 月:0表示1月,依次类推,11表示12月。
- 日: 1-31。
- 时:0-23。
- 分:0-59。
- 秒:0-59。
- 毫秒:0-999。
静态方法
Date.now()
- 返回当前时间距离1970年1月1日的毫秒数。
Date.now(); // 1708676336936
Date.parse()
- 解析日期字符串,返回该时间距离1970年1月1日的毫秒数。
Date.parse('2011-10-10') // 1318204800000
Date.parse('2011-10-10 14:48:00') // 1318229280000
Date.parse('xxx') // NaN
Date.UTC()
- 接收年月日等变量作为参数,返回该时间距离1970年1月1日的毫秒数。该方法的参数用法与
Date构造函数完全一致,区别在于Date.UTC方法的参数会被解释为 UTC 时间(世界标准时间),Date构造函数的参数会被解释为当前时区的时间。
Date.UTC(2011, 0, 1, 2, 3, 4, 567) // 1293847384567
实例方法
valueOf()
- 返回实例对象距离时间零点(1970/1/1 00:00:00)对应的毫秒数,该方法等同于
getTime。
var date = new Date()
date.valueOf() // 1708401192163
date.valueOf() === date.getTime() // true
// 预期为数值的场合,Date实例对象会自动调用该方法。
var start = new Date();
// 3秒后
var end = new Date();
end - start; // 3000
toString()
- 返回一个完整的日期字符串,直接读取Date实例默认调用的方法。
var d = new Date(2013, 0, 1);
d.toString()
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"
d
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"
toUTCString()
- 返回对应的UTC时间,比北京时间晚8个小时。
var d = new Date(2013, 0, 1);
d.toUTCString() // 'Mon, 31 Dec 2012 16:00:00 GMT'
toISOString()
- 返回UTC时间的ISO8601写法。
var d = new Date(2013, 0, 1);
d.toISOString() // '2012-12-31T16:00:00.000Z'
toJSON()
- 返回一个JSON格式的ISO日期字符串,与
toISOString()的返回结果完全相同。
var d = new Date(2013, 0, 1);
d.toJSON() // '2012-12-31T16:00:00.000Z'
toDateString()
- 返回日期字符串(不含时分秒)。
var d = new Date(2013, 0, 1);
d.toDateString() // 'Tue Jan 01 2013'
toTimeString()
- 返回时间字符串(不含年月日)。
var d = new Date(2013, 0, 1, 15, 30, 20);
d.toTimeString() // '15:30:20 GMT+0800 (中国标准时间)'
toLocale*()
- 以下三种方法,可以将 Date 实例转为表示本地时间的字符串, 该字符串格式因不同语言而不同。
toLocaleString():完整的本地时间。toLocaleDateString():本地日期(不含小时、分和秒)。toLocaleTimeString():本地时间(不含年月日)。
- 以上三种方法都有两个可选的参数,第一个指定所有语言的字符串,第二个是配置对象。具体详情请百度。
var d = new Date(2013, 0, 1);
d.toLocaleString('en-US') // "1/1/2013, 12:00:00 AM"
d.toLocaleString('zh-CN') // "2013/1/1 上午12:00:00"
d.toLocaleDateString('en-US') // "1/1/2013"
d.toLocaleDateString('zh-CN') // "2013/1/1"
d.toLocaleTimeString('en-US') // "12:00:00 AM"
d.toLocaleTimeString('zh-CN') // "上午12:00:00"
get*()
getFulleYear:返回四位的年份。getMonth:返回月份,0一月~11十二月。getDate:返回对应日,1日~31日。getDay:返回星期几,0星期日~6星期六。getHours():返回小时(0-23)。getMinutes():返回分钟(0-59)。getSeconds():返回秒(0-59)。getMilliseconds():返回毫秒(0-999)。getTime:返回距离1970年1月1日的毫秒,等同于valueOf方法。getTimezoneOffset():返回当前时间与UTC时区差异,以分钟表示。
var date = new Date()
date.getFullYear() // 2024
date.getMonth() // 1
date.getDate() // 20
date.getDay() // 2
date.getHours() // 12
date.getMinutes() // 42
date.getSeconds() // 19
date.getMilliseconds() // 669
date.getTime() // 1708404145669
date.getTimezoneOffset() // -480 比UTC少480分钟,即比UTC早8小时
以上方法返回的都是整数。
以上方法返回的都是当前时区的时间,想要获取UTC版本的时间,请调用getUTC*()。
set*()
setFullYear(year [, month, date]):设置四位年份。setMonth(month [, date]):设置月份(0-11)。setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。setHours(hour [, min, sec, ms]):设置小时(0-23)。setMinutes(min [, sec, ms]):设置分钟(0-59)。setSeconds(sec [, ms]):设置秒(0-59)。setMilliseconds(ms):设置毫秒(0-999)。setTime(milliseconds):设置毫秒时间戳。
var date = new Date()
date.setFullYear(2018) // 1519103801863
date.setMonth(4) // 1526793401863
date.setDate(1) // 1525151801863
date.setHours(8) // 1525133801863
date.setMinutes(30) // 1525134641863
date.setSeconds(40) // 1525134640863
date.setMilliseconds(555) // 1525134640555
date // Tue May 01 2018 08:30:40 GMT+0800 (中国标准时间)
date.setTime(1708404145669)
date // Tue Feb 20 2024 12:42:25 GMT+0800 (中国标准时间)
set*()系列方法除了setTime(),其它的都有对应的UTC版本,即设置UTC时区的时间。