📜  在 javascript 中解析时间(1)

📅  最后修改于: 2023-12-03 15:07:41.152000             🧑  作者: Mango

在 JavaScript 中解析时间

在 JavaScript 中,处理时间是一个常见的问题。本文将介绍在 JavaScript 中如何解析、格式化、比较和操作时间。

解析时间

JavaScript 提供了 Date 对象来处理时间。可以使用 new Date() 构造函数来创建一个当前时间的对象:

const now = new Date();
console.log(now); // 输出当前时间的字符串表示

如果需要解析一个字符串表示的时间,可以使用 Date 构造函数的另一种形式。例如,下面的代码将解析一个 ISO 8601 格式的字符串:

const str = '2022-01-01T00:00:00.000Z';
const date = new Date(str);
console.log(date); // 输出该字符串表示的时间对象

注意,Date 构造函数使用的是本地时区,因此解析出的时间对象也会自动转换为本地时区的时间。

在解析时间时,还要注意传入的时间字符串的格式。如果格式错误,将会返回 Invalid Date。为了避免这种情况,可以使用第三方库如 moment.js 来解析时间,并提供更灵活的时间格式设置。

格式化时间

将时间对象格式化为字符串,可以使用 Date 对象的一系列方法,例如:

const date = new Date('2022-01-01T00:00:00.000Z');
console.log(date.toISOString()); // 输出 ISO 8601 格式的字符串 '2022-01-01T00:00:00.000Z'
console.log(date.toLocaleString()); // 输出本地时间格式的字符串 '2022/1/1 下午8:00:00'

可以看到,toISOString() 方法输出的是标准的 UTC 时间格式字符串,toLocaleString() 方法则输出本地格式化的字符串。

除了上述方法,还可以使用 Intl.DateTimeFormat 类来自定义格式化方式。例如,下面的代码输出一个自定义格式的字符串:

const date = new Date('2022-01-01T00:00:00.000Z');
const formatter = new Intl.DateTimeFormat('en-US', {
  year: 'numeric', month: 'long', day: 'numeric',
  hour: 'numeric', minute: 'numeric', second: 'numeric',
});
console.log(formatter.format(date)); // 输出 'January 1, 2022, 8:00:00 PM'
比较时间

在 JavaScript 中,比较时间有两种方式:使用 ><>=<= 运算符比较时间对象;或者将时间对象转换为时间戳(以毫秒为单位),再进行比较。例如:

const now = new Date();
const future = new Date(now.getTime() + 1000 * 60 * 60 * 24); // 向后推一天
console.log(future > now); // 输出 true
console.log(future.getTime() > now.getTime()); // 输出 true

需要注意的是,如果直接使用 ==!= 比较时间对象,将会使用对象的引用进行比较,而不是实际的时间值。因此,建议使用上述方式来比较时间。

操作时间

JavaScript 中提供了一些方法来对时间对象进行操作,例如:

const now = new Date();
console.log(now); // 输出当前时间对象
now.setFullYear(2020);
console.log(now); // 输出修改年份后的时间对象

可以看到,setFullYear() 方法可以修改时间对象的年份,其他属性如月份、日期、小时、分钟等也可以类似地进行修改。同时,还有 getDate()getMonth()getFullYear() 等方法来获取时间对象的各个属性值。

上述操作时间的方法是直接修改时间对象的属性值,因此会影响到原始的时间对象。如果需要创建一个新的时间对象,则可以使用 new Date() 构造函数来创建一个新的时间对象。例如,下面的代码创建了一个向前推一天的新时间对象:

const now = new Date();
const yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24); // 向前推一天
console.log(now); // 输出当前时间对象
console.log(yesterday); // 输出向前推一天的时间对象

需要注意的是,JavaScript 中的时间操作是基于本地时区的,因此在涉及跨时区操作时需要格外注意。