创建日期对象的方法
要创建一个日期函数,使用new操作符和Date构造函数,例如:
var now = new Date();
在调用Date()构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。
如果想根据特定的日期和时间创建日期对象,必须传入该日期的毫秒数,即即从 UTC时间 1970年 1月 1日午 夜起至该日期止经过的毫秒数。为了简化这一计算过程,ECMAScript 提供了两个方法:Date.parse() 和 Date.UTC()。
Date.parse()方法
Date.parse()方法接收一个表示日期的字符串参数,然后根据这个字符串返回相应日期的毫秒数。
将地区设置为美国的浏览器通常都接受下列日期格式:
- “月/日/年”,如 6/13/2004;
- “英文月名 日,年”,如 January 12,2004;
- “英文星期几 英文月名 日 年 时:分:秒 时区”,如 Tue May 25 2004 00:00:00 GMT-0700。
- ISO 8601 扩展格式YYYY-MM-DDTHH:mm:ss.sssZ(例如 2004-05-25T00:00:00)。只有兼容 ECMAScript 5的实现支持这种格式。
Date.parse()方法的字符串不能表示日期,那么它会返回 NaN。
实际上,如果直接将表 示日期的字符串传递给 Date 构造函数,也会在后台调用 Date.parse()。
因此:
var someDate = new Date("May 25, 2004");
等价于
var someDate = new Date(Date.parse("May 25, 2004"));
console.log(someDate); //Tue May 25 2004 00:00:00 GMT+0800 (中国标准时间)
Date.UTC()方法
Date.UTC()方法同样也返回表示日期的毫秒数,但它与 Date.parse()在构建值时使用不同的信息。Date.UTC()的参数分别是年份、基于0的月份(一月是 0,二月是 1,以此类推)、月中的哪一天 (1 到 31)、小时数(0 到 23)、分钟、秒以及毫秒数。在这些参数中,只有前两个参数(年和月)是必需的。如果没有提供月中的天数,则假设天数为 1;如果省略其他参数,则统统假设为 0。以下是两个使用 Date.UTC()方法的例子:
// GMT 时间 2000 年 1 月 1 日午夜零时
var y2k = new Date(Date.UTC(2000, 0));
console.log(y2k);//Sat Jan 01 2000 08:00:00 GMT+0800 (中国标准时间)
// GMT 时间 2005 年 5 月 5 日下午 5:55:55
var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));
console.log(allFives); // Fri May 06 2005 01:55:55 GMT+0800 (中国标准时间)
注:返回的时间有误差的原因是new Date() 方法返回的是本机时间,也就是东八区的时间,Date.UTC()返回的是0时区的时间,返回的是0时区的时间与1970.1.1相差的毫秒数,两者相差8个小时。
如同模仿 Date.parse()一样,Date 构造函数也会模仿 Date.UTC(),但有一点明显不同:日期 和时间都基于本地时区而非 GMT来创建。不过,Date 构造函数接收的参数仍然与 Date.UTC()相同。因此,如果第一个参数是数值,Date 构造函数就会假设该值是日期中的年份,而第二个参数是月份, 以此类推。
例如:
// 本地时间 2000 年 1 月 1 日午夜零时
var y2k = new Date(2000, 0);
// 本地时间 2005 年 5 月 5 日下午 5:55:55
var allFives = new Date(2005, 4, 5, 17, 55, 55);
Date.now()方法
Date.now()方法返回调用这个方法的日期和时间的毫秒数。
例如:
var now=Date.now();
console.log(now); // 1600424632596
+操作符
,使用+操作符把 Data 对象转换成字符串,也可以达到返回调用这个方法的日期和时间的毫秒数的目的。
例如:
var now= + new Date();
console.log(now); //1600424747827
继承的方法
toLocalString()方法
toLocalString()方法会按照与浏览器设置的地区相适应的格式返回日期和时间。
toString()方法
*toString()方法通常返回带有时区信息的日期和时间,其中时间一般以军用时间表示
valueOf()方法
valueOf()方法返回日期的毫秒表示。因此可以方便使用比较操值作符来比较日期。
例如:
var now= new Date();
console.log(now); //Fri Sep 18 2020 18:33:48 GMT+0800 (中国标准时间)
console.log(now.toLocaleString()); //2020/9/18 下午6:33:48
console.log(now.toString()); //Fri Sep 18 2020 18:33:48 GMT+0800 (中国标准时间)
console.log(now.valueOf()); //1600425228750
日期格式化方法
- toDateString()——以特定于实现的格式显示星期几、月、日和年;
- toTimeString()——以特定于实现的格式显示时、分、秒和时区;
- toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
- toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
- toUTCString()——以特定于实现的格式完整的 UTC日期。
与 toLocaleString()和 toString()方法一样,以上这些字符串格式方法的输出也是因浏览器 而异的,因此没有哪一个方法能够用来在用户界面中显示一致的日期信息。