您的位置:首页 > 百科大全 |

在没有JavaScript库的情况下格式化日期和时间

日期和时间在 JavaScript 中可能很棘手。你总是想确保你做的是正确的。幸运的是,因为 JavaScript 有一个内置的 Date 对象,它使处理日期和时间变得更加容易。事实上,Date 对象上有许多不同的方法可用于对日期执行不同的操作。在这篇博客中,我将介绍其中的一些方法。

在没有JavaScript库的情况下格式化日期和时间

关于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')

下面的示例是不鼓励的,可能不适用于所有运行时/浏览器。如果需要其他字符串格式,像momentor这样的库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()为您提供设置的选项minutesseconds以及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 中格式化日期/时间数据。已经有很多库可以为我们处理这个问题,但是如果您在遗留代码库中工作,或者出于性能原因想要避免使用库,您可能必须在本地处理日期/时间格式。