本文以《JavaScript高级程序设计》第4版作为基础参考,整理使用JavaScript开发过程中,日期对象使用相关的知识点。
本文是开发知识点系列第七篇。
- 第一篇:JavaScript开发中变量、常量声明的规矩总结
- 第二篇:JavaScript开发:数据类型知识总结
- 第三篇:JavaScript开发:使用Number数据类型需要注意的问题
- 第四篇:JavaScript开发:操作符在实际开发中的使用总结
- 第五篇:JavaScript开发:流程控制语句在实际开发中的使用总结
- 第六篇:JavaScript开发:函数在实际开发中的使用总结(1)
Date对象用于处理日期和时间,其提供了多种方法和属性,可以用于创建、解析、操作和格式化日期和时间。
早期的Date类型参考了Java早期版本中的java.util.Date。Date类型将日期保存为自协调世界时(UTC,Universal Time Coordinated)时间1970年1月1日午夜(零时)至今所经过的毫秒数。使用这种存储格式,Date类型可以精确表示1970年1月1日之前以及之后285,616年的日期。
要创建日期对象,只需要使用new
操作符调用Date
构造函数就可以
js
let now= new Date();
在不给Date
构造函数传参数的情况下,创建的对象将保存当前日期和时间。基于其它日期和时间创建日期对象,必须传入其毫秒表示(UNIX纪元1970年1月1日午夜之后的毫秒数)。
另外,Date
的参数还可以为
-
时间戳:
new Date(milliseconds)
会创建一个表示从1970年1月1日00:00:00 UTC(协调世界时)到指定毫秒数的日期和时间的Date对象。 -
日期字符串:
new Date(dateString)
会创建一个表示由指定的日期和时间字符串表示的日期和时间的Date对象。 -
日期的各个部分:
new Date(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
也会创建一个表示指定的日期和时间的Date对象。
以下是一些示例:
javascript
var date1 = new Date(); // 当前日期和时间
var date2 = new Date(1627471200000); // 2021-07-28T12:00:00.000Z
var date3 = new Date('2022-01-01'); // 2022-01-01T00:00:00.000Z
var date4 = new Date(2022, 0, 1); // 2022-01-01T00:00:00.000Z
请注意,月份是从0开始的,所以1月是0,2月是1,以此类推。
Date
的参数还可以是另一个Date
的实例:新的Date
对象将表示与传入的Date
对象相同的日期和时间。这可以用于复制一个Date
对象
javascript
var date1 = new Date(); // 当前日期和时间
var date2 = new Date(date1); // 与date1相同的日期和时间
console.log(date1); // 输出date1的日期和时间
console.log(date2); // 输出date2的日期和时间,应该与date1相同
上述代码date2
是通过传入date1
作为参数来创建的。因此,date2
表示与date1
相同的日期和时间。
请注意,尽管date1
和date2
表示相同的日期和时间,但它们是两个不同的对象。如果修改了date1
的日期或时间,date2
的日期和时间不会改变,反之亦然。
Date对象的静态方法
Date
对象有3个静态方法:
-
Date.now()
:返回当前时间的时间戳,即从1970年1月1日00:00:00 UTC到现在的毫秒数。例如:javascriptlet timestamp = Date.now(); console.log(timestamp); // 输出当前时间的时间戳
该方法很多时候用来获取当前的时间戳,另外就是获取时间戳还可以使用
+new Date()
javascriptlet timestamp = +new Date(); console.log(timestamp); // 输出当前时间的时间戳
-
Date.parse(dateString)
:解析一个表示特定日期的字符串,并返回从1970年1月1日00:00:00 UTC到该日期的毫秒数。如果该字符串不能表示一个日期,则返回NaN
。例如:javascriptlet timestamp = Date.parse('2022-01-01'); console.log(timestamp); // 输出'2022-01-01'这个日期的时间戳 var timestamp1 = Date.parse('March 21, 2022'); console.log(timestamp1); // 输出'2022-03-21'这个日期的时间戳 var timestamp2 = Date.parse('2022-12-31T23:59:59Z'); console.log(timestamp2); // 输出'2022-12-31T23:59:59Z'这个日期的时间戳
-
Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
:接受的参数与构造函数new Date()
一样,但它返回的是从1970年1月1日00:00:00 UTC到指定日期的毫秒数,而不是一个Date
对象。例如:javascriptlet timestamp = Date.UTC(2022, 0, 1); console.log(timestamp); // 输出'2022-01-01 00:00:00 UTC'这个日期的时间戳 var timestamp3 = Date.UTC(2022, 11, 31, 23, 59, 59); console.log(timestamp3); // 输出'2022-12-31T23:59:59Z'这个日期的时间戳 var timestamp4 = Date.UTC(2022, 2, 21); console.log(timestamp4); // 输出'2022-03-21T00:00:00Z'这个日期的时间戳
Date对象继承的方法
JavaScript的Date对象继承自Object,因此它继承了Object的所有方法,如toString()
,valueOf()
等。然而,Date对象重写了一些方法,以提供更适合处理日期和时间的功能
toString()
:在Object中,这个方法返回一个表示该对象的字符串。在Date中,这个方法被重写以返回一个表示该日期和时间的字符串。例如:
javascript
var date = new Date();
console.log(date.toString()); // 输出类似于"Wed Jul 28 2021 14:00:00 GMT+0800 (China Standard Time)"的字符串
valueOf()
:在Object中,这个方法返回对象的原始值。在Date中,这个方法被重写以返回日期的时间戳,即从1970年1月1日00:00:00 UTC到该日期的毫秒数。例如:
javascript
var date = new Date();
console.log(date.valueOf()); // 输出类似于1627447200000的数字
toLocaleString()
:在Object中,这个方法返回一个表示该对象的字符串,该字符串与执行该方法的环境的语言设置有关。在Date中,这个方法被重写以返回一个表示该日期和时间的字符串,该字符串与执行该方法的环境的语言设置有关。例如:
javascript
var date = new Date();
console.log(date.toLocaleString()); // 在美国英语环境中,输出类似于"7/28/2021, 2:00:00 PM"的字符串
以上只是一部分被Date对象重写的方法,还有其他一些方法,如toDateString()
,toTimeString()
,toISOString()
等,也都是Date对象特有的。可自行测试。
Date对象格式化的方法
JavaScript的Date对象还提供了多种方法来格式化日期和时间。以下是一些常用的方法:
toDateString()
:返回一个表示该日期的日期部分(不包括时间)的字符串。例如:
javascript
var date = new Date();
console.log(date.toDateString()); // 输出类似于"Wed Jul 28 2021"的字符串
toTimeString()
:返回一个表示该日期的时间部分(不包括日期)的字符串。例如:
javascript
var date = new Date();
console.log(date.toTimeString()); // 输出类似于"14:00:00 GMT+0800 (China Standard Time)"的字符串
toISOString()
:返回一个表示该日期的ISO 8601扩展格式的字符串。例如:
javascript
var date = new Date();
console.log(date.toISOString()); // 输出类似于"2021-07-28T06:00:00.000Z"的字符串
toLocaleDateString()
:返回一个表示该日期的日期部分(不包括时间)的字符串,该字符串与执行该方法的环境的语言设置有关。例如:
javascript
var date = new Date();
console.log(date.toLocaleDateString()); // 在美国英语环境中,输出类似于"7/28/2021"的字符串
toLocaleTimeString()
:返回一个表示该日期的时间部分(不包括日期)的字符串,该字符串与执行该方法的环境的语言设置有关。例如:
javascript
var date = new Date();
console.log(date.toLocaleTimeString()); // 在美国英语环境中,输出类似于"2:00:00 PM"的字符串
上面是一部分格式化日期和时间的方法,还有其他一些方法,如toLocaleString()
,toUTCString()
等,也可以用于格式化日期和时间。
开发中Date对象的常规使用方法
在实际开发中,Date对象常用于处理日期和时间相关的操作。以下是一些常规的使用方法:
- 获取当前日期和时间:
javascript
var now = new Date();
console.log(now); // 输出当前日期和时间
- 获取特定日期和时间:
javascript
var specificDate = new Date('2022-01-01T00:00:00');
console.log(specificDate); // 输出2022年1月1日的午夜
- 获取日期和时间的各个部分:
javascript
var now = new Date();
console.log(now.getFullYear()); // 输出年份
console.log(now.getMonth()); // 输出月份(0-11,0表示1月)
console.log(now.getDate()); // 输出日期(1-31)
console.log(now.getHours()); // 输出小时(0-23)
console.log(now.getMinutes()); // 输出分钟(0-59)
console.log(now.getSeconds()); // 输出秒数(0-59)
console.log(now.getMilliseconds()); // 输出毫秒数(0-999)
- 设置日期和时间的各个部分:
javascript
var now = new Date();
now.setFullYear(2022); // 设置年份为2022
now.setMonth(0); // 设置月份为1月
now.setDate(1); // 设置日期为1日
now.setHours(0); // 设置小时为0
now.setMinutes(0); // 设置分钟为0
now.setSeconds(0); // 设置秒数为0
now.setMilliseconds(0); // 设置毫秒数为0
console.log(now); // 输出2022年1月1日的午夜
- 比较两个日期:
javascript
var date1 = new Date('2022-01-01T00:00:00');
var date2 = new Date();
if (date1.getTime() === date2.getTime()) {
console.log('两个日期相等');
} else if (date1.getTime() < date2.getTime()) {
console.log('date1在date2之前');
} else {
console.log('date1在date2之后');
}
6.时间转换
将格林尼治时间转为东八区时间
js
var gmtDate = new Date('2022-01-01T00:00:00Z'); // 创建一个表示格林尼治时间的Date对象
console.log(gmtDate.toLocaleString()); // 输出东八区时间的字符串表
也可以采用下面的方式转换
js
let gmtDate = new Date('2022-01-01T00:00:00Z'); // 创建一个表示格林尼治时间的Date对象
let offset = gmtDate.getTimezoneOffset() * 60 * 1000; // 获取当前时区和格林尼治时间的毫秒差
let localDate = new Date(gmtDate.getTime() - offset); // 创建一个表示东八区时间的Date对象
console.log(localDate); // 输出东八区时间的Date对象
不同日期、时间记录的标准和解释
日期和时间的记录有多种国际标准
-
ISO 8601:这是一个由国际标准化组织制定的日期和时间的表示方法。它的基本格式是"YYYY-MM-DDTHH:mm:ss.sssZ",其中"YYYY"表示年份,"MM"表示月份,"DD"表示日期,"T"是时间的开始,"HH"表示小时,"mm"表示分钟,"ss.sss"表示秒和毫秒,"Z"表示协调世界时。例如,"2022-01-01T00:00:00.000Z"表示2022年1月1日的协调世界时的午夜。
-
RFC 2822:这是一个由互联网工程任务组制定的日期和时间的表示方法,主要用于电子邮件和HTTP协议。它的格式是"Day, DD Mon YYYY HH:mm:ss +ZZZZ",其中"Day"表示星期几,"DD"表示日期,"Mon"表示月份,"YYYY"表示年份,"HH:mm:ss"表示时间,"+ZZZZ"表示时区。例如,"Fri, 01 Jan 2022 00:00:00 +0000"表示2022年1月1日的协调世界时的午夜。
-
UNIX时间戳:这是一个表示从1970年1月1日00:00:00 UTC到某个时间点的秒数的数字。例如,"1640995200"表示2022年1月1日的协调世界时的午夜。
上面同时也是日期和时间的一部分表示方法,还有其他一些方法,如美国的"MM/DD/YYYY"格式,欧洲的"DD.MM.YYYY"格式等。
不同日期、时间记录的标准之间如何进行转换?上面三种记录格式都可以作为Date
对象参数,可以通过先转成Date
对象再转为特定标准格式
-
UTC(协调世界时) :
Date
对象的toUTCString
方法可以将日期和时间转换为UTC格式的字符串。javascriptvar date = new Date(); console.log(date.toUTCString()); // 输出:"Mon, 14 Feb 2022 08:23:17 GMT"
-
ISO 8601(国际标准化组织的日期和时间表示法) :
Date
对象的toISOString
方法可以将日期和时间转换为ISO 8601格式的字符串。javascriptvar date = new Date(); console.log(date.toISOString()); // 输出:"2022-02-14T08:23:17.123Z"
-
Unix时间戳(自1970年1月1日00:00:00 UTC开始的毫秒数) :
Date
对象的getTime
方法可以获取Unix时间戳,而Date
对象的构造函数可以接受一个Unix时间戳来创建一个新的Date
对象。javascriptvar date = new Date(); var timestamp = date.getTime(); console.log(timestamp); // 输出:1644825797123 var newDate = new Date(timestamp); console.log(newDate.toString()); // 输出:"Mon Feb 14 2022 16:23:17 GMT+0800 (中国标准时间)"
总结一下
- Date对象可以有参数也可以没有参数使用,Date参数的几种形式?
- Date的静态方法有三个:
Date.now()
、Date.parse(dateString)
、Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
,都返回的是时间戳 - Date重写了
toString()
、valueOf()
方法,toString()
返回一个表示该日期和时间的字符串,valueOf()
返回日期的时间戳 toLocaleString()
这个方法被重写以返回一个表示该日期和时间的字符串,该字符串与执行该方法的环境的语言设置有关- Date对象格式化的方法,根据显示需要返回特定格式
- 知道三种日期和时间的记录国际标准
- 知道怎么进行不同记录标准进行转换:先转成对象,再转为特定格式
本文完。