JavaScript/日期
外观
在 JavaScript 中,一个日期是一个对象。因此必须使用new
运算符显式创建它。
日期包含一个值,表示自 1970 年 1 月 1 日 UTC 以来的毫秒数。值得一提的是它不包含什么:对象中没有关于时区的信息。但是,您可以将其转换为任何任意时区的适当字符串。其他方法可以选择月份或星期几等部分,或者您可以将该数字用于任何计算,以及更多。
默认构造函数会创建日期对象,时间为您计算机的当前时间。
const currentMilliSeconds = new Date(); // creates a new Date object as of 'now'
alert(currentMilliSeconds); // implicit conversion to string
alert(currentMilliSeconds.toString()); // explicit conversion to string
alert(currentMilliSeconds.valueOf()); // the real value
您可以将参数传递给构造函数以生成特定的日期对象。
// 1000 ms = 1 second after the beginning of JavaScript time
const pointInTime_1 = new Date(1000);
alert(pointInTime_1);
// begin of last minute in last century
const pointInTime_2 = new Date(1999, 11, 31, 23, 59);
alert(pointInTime_2);
一些常用的日期方法是
静态方法
- Date.now():返回自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数(加上/减去几小时),以您计算机的时区为准。
- Date.UTC(<参数>):返回自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。
- Date.parse(text):由于浏览器差异和不一致,强烈不建议使用Date.parse()解析字符串。
实例方法
- toISOString():返回一个 ISO 8601 格式的字符串。
- getFullYear():返回完整的 4 位年份。
- getMonth():返回当前月份。[0 - 11]
- getDate():返回一个月中的日期。[1 - 31]
- getDay():返回一周中的日期。[0 - 6]。星期日为 0,其他星期几取下一个值。
- getHours():返回基于 24 小时制的小时数 [0 - 23]。
- getMinutes():返回分钟。[0 - 59]
- getSeconds():返回秒。[0 - 59]
- getTime():返回自 1970 年 1 月 1 日以来的毫秒数。
- valueOf():返回自 1970 年 1 月 1 日以来的毫秒数。等效于 getTime()。
- getTimezoneOffset():返回 UTC 与本地时间之间的分钟差。
- setFullYear(year):在日期对象中存储完整的 4 位年份。
- setMonth(month, day):设置月份,以及可选的该月中的日期。'0' 是 1 月,...
日期可以通过valueOf()
方法或在构造函数前加上+
符号返回为整数,例如,用于“播种”PRNG(伪随机数生成器)或执行计算。
const dateAsInteger_1 = new Date().valueOf();
alert(dateAsInteger_1);
const dateAsInteger_2 = +new Date();
alert(dateAsInteger_2);
日期对象只包含一个整数。它不知道任何关于时区的信息。只要您不以任何形式指定时区,您就在您的本地时区工作。
但有时有必要考虑时区。
// Example 1
// Create it in UTC: 27th of January, midnight
const date_1 = new Date(Date.UTC(2020, 00, 27, 0, 0, 0));
alert(date_1);
// show it in another timezone (Jakarta is +7) ...
const jakartaTime = new Intl.DateTimeFormat('en-GB', { timeZone: 'Asia/Jakarta', dateStyle: 'full', timeStyle: 'long' }).format(date_1);
alert(jakartaTime);
// ... the original value has not changed
alert(date_1);
// Example 2
// assume we are in New York timezone (-5 against UTC)
const date_2 = new Date();
console.log(date_2.toString());
// show it in another timezone (Los Angeles is -8 against UTC)
const laTime = new Intl.DateTimeFormat('en-GB', { timeZone: 'America/Los_Angeles', dateStyle: 'full', timeStyle: 'long' }).format(date_2);
console.log(laTime);
// ... the internal value has not changed
console.log(date_2.toString());
日期对象有一些不一致和缺陷,特别是:时区支持较弱,不支持非公历,缺少日历功能,等等。它们可能会在后续的 JavaScript 版本中的Temporal API中得到修复。