日期和时间在 JavaScript 中可能很棘手。你总是想确保你做的是正确的。幸运的是,因为 JavaScript 有一个内置的 Date 对象,它使处理日期和时间变得更加容易。事实上,Date 对象上有许多不同的方法可用于对日期执行不同的操作。在这篇博客中,我将介绍其中的一些方法。
关于Date
对象 的快速说明
JavaScript中的内置Date
对象为我们提供了一组用于处理日期和时间数据的 API。Date
对象实例表示单个时间点。该实例采用与平台无关的格式。
创建实例
当前日期/时间
您可以通过多种方式获取当前日期和时间的实例(或表示)。
使用构造函数
let now;now = new Date();console.log(now); // [object Date] { ... }
使用Date()
函数
这将返回当前日期和时间的字符串表示形式
now = Date();console.log(now);// "Mon Nov 21 2022 10:39:45 GMT+0200 (South Africa Standard Time)"
使用静态方法,.now()
这将返回一个number
表示自 1970 年 1 月 1 日 UTC 以来经过的毫秒数
now = Date.now();console.log(now);// 1669019985182
其他创建实例的方法
解析字符串
使用new Date()
构造函数(或Date.parse()
)。字符串必须符合 ISO 8601 格式,YYYY-MM-DDTHH:mm:ss.sssZ
.
const nextBirthday= new Date('2023-08-02T00:00:00')
下面的示例是不鼓励的,可能不适用于所有运行时/浏览器。如果需要其他字符串格式,像moment
or这样的库dayjs
可以提供帮助。
const nextBirthday = new Date('August 02, 2023 00:00:00');// DISCOURAGED: may not work in all runtimes
在构造函数中传递整数
这个语法是new Date(year, month, day, hours, minutes, seconds, milliseconds);
这month
是 0 索引的,意思0
是一月和11
十二月
nextBirthday = new Date(2023, 7, 2, 0, 0, 0);console.log(nextBirthday .toString());// "Wed Aug 02 2023 00:00:00 GMT+0200 (South Africa Standard Time)"
纪元 (Unix) 时间戳
纪元时间戳是自 1970 年 1 月 1 日(UTC/GMT 午夜)以来经过的秒数
赛坦克斯new Date(milliseconds)
nextBirthday = new Date(1690927200000)
秒获取Epoch
const seconds = Math.floor(Date.now() / 1000);
日期方法
我们还可以使用Date
对象提供的方法来管理和操作日期和时间。
访问日期组件
获取年份(4 位数字,例如 2022)
nextBirthday.getFullYear()// 2023
得到月份。月份是零索引的(即 0 – 11)。
nextBirthday.getMonth()// 7
获取一个月中的第几天,从 1 到 31。
nextBirthday.getDate()// 2
获取星期几。这也是零索引(即从 0 到 6)。第一天总是星期天,0
最后一天是星期六6
。(在某些国家/地区并非如此,但无法更改)。
nextBirthday.getDay();// 2
方法 , , ,getHours()
获取getMinutes()
相应的时间分量。getSeconds()
getMilliseconds()
上述所有方法都返回相对于您当地时区的组件。UTC 对应物可用于返回相对于 UTC 的值的每个方法。只需在方法名称UTC
之后插入即可。get
// Local time is UTC +2nextBirthday.getHours(); // 0nextBirthday.getUTCHours(); // 22
解构赋值示例
const date = new Date();const [month, day, year] = [date.getMonth(), date.getDate(), date.getFullYear()];const [hour, minutes, seconds] = [date.getHours(), date.getMinutes(), date.getSeconds()];
设置日期组件
以下方法允许设置日期/时间组件
setFullYear(year, [month], [date])
setMonth(month, [date])
setDate(date)
setHours(hour, [min], [sec], [ms])
setMinutes(min, [sec], [ms])
setSeconds(sec, [ms])
setMilliseconds(ms)
setTime(milliseconds)
(从 01.01.1970 UTC 开始以毫秒为单位设置整个日期)
let now = new Date();now.setHours(12);now.setFullYear(2015);console.log(now.toString());// "Sat Nov 21 2015 12:08:53 GMT+0200 (South Africa Standard Time)"
他们每个人除了setTime()
有一个UTC变体
let now = new Date();now.setUTCHours(2);
有些方法可以一次设置多个组件。例如,setHours()
为您提供设置的选项minutes
,seconds
以及milliseconds
。如果未包含在方法调用中,则不会修改这些选项。
let today = new Date();today.setHours(12);console.log(now.toString());// "Mon Nov 21 2022 12:13:36 GMT+0200 (South Africa Standard Time)"now.setHours(12, 12, 12, 12);console.log(now.toString());// "Mon Nov 21 2022 12:12:12 GMT+0200 (South Africa Standard Time)"
格式化
方法的变化toString()
。Date
返回实例的各种字符串表示形式。
let now = new Date();now.toString();// "Mon Nov 21 2022 14:17:21 GMT+0200 (South Africa Standard Time)"now.toDateString();// "Mon Nov 21 2022"now.toTimeString();// "14:17:21 GMT+0200 (South Africa Standard Time)"now.toISOString();// "2022-11-21T12:17:21.595Z"now.toUTCString();// "Mon, 21 Nov 2022 12:17:21 GMT"now.toLocaleString();// "11/21/2022, 2:17:21 PM"now.toLocaleDateString();// "11/21/2022"now.toLocaleTimeString();// "2:17:21 PM"now.toJSON();// "2022-11-21T12:17:21.595Z"
Intl.DateTimeFormat
对象 _
在现代浏览器和运行时,JavaScript 包含一个国际化 API,它允许对语言敏感的日期和时间格式。您可以立即开始使用它,而无需导入庞大的日期格式库。
const now = new Date();const formatted1 = Intl.DateTimeFormat('en-ZM').format(now);const formatted2 = Intl.DateTimeFormat('en-ZM', { dateStyle: "full" }).format(now);const formatted3 = Intl.DateTimeFormat('en-ZM', { dateStyle: "long" }).format(now);const formatted4 = Intl.DateTimeFormat('en-ZM', { dateStyle: "medium" }).format(now);const formatted5 = Intl.DateTimeFormat('en-ZM', { dateStyle: "short" }).format(now);console.log(now); // [object Date] ...console.log(formatted1); // "21/11/2022"console.log(formatted2); // "Monday, November 21, 2022"console.log(formatted3); // "21 November 2022"console.log(formatted4); // "21 Nov 2022"console.log(formatted5); // "21/11/2022"
结论
在今天的博文中,我们学习了如何在 JavaScript 中格式化日期/时间数据。已经有很多库可以为我们处理这个问题,但是如果您在遗留代码库中工作,或者出于性能原因想要避免使用库,您可能必须在本地处理日期/时间格式。