用文字记录生活,留下美好瞬间
原创

JavaScript中的日期

共 2,910 字,需阅读 7 分钟
2018/07/06 上午
899 次阅读

在 Web 开发中,时间和日期是非常重要的组成部分。无论是通过网站上的日程安排、计算过去的时间还是显示当前的日期和时间,我们都需要使用到日期和时间的操作。JavaScript 提供了多种方式来操作日期和时间,本文将介绍这些技术以及一些最佳实践。

#日期对象(Date Object)

JavaScript 中的 Date 对象用于处理日期和时间。我们可以使用 new Date() 来创建一个 Date 实例。默认情况下,它将返回当前日期和时间,如下所示:

          
  • 1
  • 2
const now = new Date(); console.log(now); // 输出当前日期和时间

我们也可以传递参数来指定日期和时间,如下:

          
  • 1
  • 2
  • 3
  • 4
  • 5
const date1 = new Date('1995-12-17T03:24:00'); console.log(date1); // 输出:Sun Dec 17 1995 03:24:00 GMT+0800 (中国标准时间) const date2 = new Date(1995, 11, 17); console.log(date2); // 输出:Sun Dec 17 1995 00:00:00 GMT+0800 (中国标准时间)

在以上代码中,我们从字符串和数值传递了不同的参数来创建 Date 对象。字符串需要遵循 ISO 格式,可以包含当地时区信息(例如 "1995-12-17T03:24:00+08:00" 表示东八区时间)。数字的参数分别表示年份、月份和日期。

我们还可以使用 Date.parse() 方法来解析日期字符串,如下:

          
  • 1
  • 2
const date3 = Date.parse('1995-12-17T03:24:00Z'); console.log(new Date(date3)); // 输出:Sun Dec 17 1995 11:24:00 GMT+0800 (中国标准时间)

在上面的代码中,Date.parse() 解析 ISO 字符串,并返回自 1970 年 1 月 1 日 00:00:00 UTC 起所经过的毫秒数(也称为时间戳)。将此值传递给 new Date() 构造函数将返回一个新的 Date 对象。

#日期格式化

要更好地控制日期输出的格式,我们可以使用 Intl.DateTimeFormat() 对象。该对象提供了多种选项来格式化日期和时间,并且跨浏览器兼容良好,请看下面的例子:

          
  • 1
  • 2
  • 3
const options = { year: 'numeric', month: 'long', day: 'numeric' }; const formatter = new Intl.DateTimeFormat('zh-CN', options); console.log(formatter.format(now)); // 输出:2023年6月10日

在代码中,options 对象指定了输出的格式,包括:年份、月份和日期。formatter 对象用于将 now 日期对象格式化为字符串。

Intl.DateTimeFormat() 构造函数中,第一个参数是语言区域代码(Locale)。通过将这个参数设置为 "zh-CN",我们可以将日期格式化为中文。

#日期运算

除了创建和格式化日期,JavaScript 还支持对日期进行运算。例如,我们可以使用 getTime() 方法来获取 Date 对象的毫秒数表示,并对其进行加减操作:

          
  • 1
  • 2
  • 3
const now = new Date(); const twoHoursLater = new Date(now.getTime() + 2 * 60 * 60 * 1000); console.log(twoHoursLater); // 输出两小时后的时间

在上面的代码中,我们使用 now.getTime() 获取了当前时间的毫秒数,然后将它加上两个小时,得到了两小时后的时间。 还可以使用 setFullYear()setMonth()setDate() 等方法来设置 Date 对象的年份、月份和日期:

          
  • 1
  • 2
  • 3
  • 4
  • 5
const now = new Date(); now.setFullYear(2022); now.setMonth(11); now.setDate(31); console.log(now); // 输出:Fri Dec 31 2022 22:36:12 GMT+0800 (中国标准时间)

在上面的代码中,我们首先获取了当前时间的 Date 对象,然后分别使用 setFullYear()setMonth()setDate() 方法将年份设置为 2022 年、月份设置为 12 月和日期设置为 31 日。

#Moment.js 库

尽管 JavaScript 本身提供了很多日期和时间处理功能,但是 Moment.js 库是一个非常流行的用于处理日期和时间的库。它提供了友好的日期格式化,比如:moment().format('YYYY-MM-DD') 可以输出带有减号分隔符的日期字符串。它还提供了很多便于使用的功能,例如:解析日期、验证日期是否有效,以及计算时间差等。

虽然 Moment.js 能够处理大多数日期和时间相关任务,但是它也相对较慢,为了实现最佳性能,我们可以考虑使用 JavaScript 第一方 API 或者其他日期库。

#最佳实践

以下是在 JavaScript 中处理日期和时间时应该遵循的最佳实践:

  1. 使用 Date 对象来处理日期和时间,以保持跨浏览器兼容性。
  2. 按照 ISO 标准提供信息,这样在不同国家的用户都能够理解您的时间格式。
  3. 使用 Intl.DateTimeFormat() 来格式化日期并将语言区域代码设置为确保正确显示语言格式。
  4. 保持最少量的 JavaScript 运算,如果需要运算,则进行必要的性能优化。
  5. 对于更复杂的任务,考虑使用日期库,Moment.js 是一个广泛使用的选择。
  6. 避免直接操作日期字符串,因为此问题可能导致与7个a的字符串连接的令人困惑的结果。
  7. 将运用标准 +/- n 表达式添加到日期中处置为额外的一项挑战,因为此缩写东西取决于日期格式。
自由转载 - 署名 - 非商业性使用
https://zhangwurui.cn/article/14
0/0条看法
访客身份
在下有一拙见,不知...
期待你的捷足先登