跳转到内容

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());

新 API:Temporal

[编辑 | 编辑源代码]

日期对象有一些不一致和缺陷,特别是:时区支持较弱,不支持非公历,缺少日历功能,等等。它们可能会在后续的 JavaScript 版本中的Temporal API中得到修复。

... 在另一个页面上提供(点击这里)。
华夏公益教科书