【发布时间】:2020-01-02 20:47:21
【问题描述】:
给定两个 Date 对象,如何正确地将第一个对象的月份设置为另一个对象的月份?
我面临着将日期、月份和年份从一个 Date 对象复制到另一个的任务。复制日期和年份按预期工作,当我尝试复制月份时出现问题。
使用 b.setMonth(a.getMonth()) 会导致 b 的月份过多。
但是,使用 b.setMonth(a.getMonth() - 1) 会导致 b 的月份比要求的少一月。
以下打字稿代码:
let a = new Date(2018, 1, 12);
let b = new Date();
console.log(a);
console.log(b);
console.log('====');
console.log(a.getMonth());
console.log(b.getMonth());
b.setMonth(a.getMonth());
console.log('====');
console.log(a.getMonth());
console.log(b.getMonth());
b.setMonth(a.getMonth() - 1);
console.log('====');
console.log(a.getMonth());
console.log(b.getMonth());
返回:
Mon Feb 12 2018 00:00:00 GMT+0100
Thu Aug 29 2019 16:11:03 GMT+0200
====
1
7
====
1
2
====
1
0 // 2 - 1 = 0 ?
看似 2 - 1 应该给出 1 (a.getMonth() - 1),但显然 Date 对象的行为不同。在javascript / typescript中将月份从一个日期对象复制到另一个对象的正确方法是什么?我想将两个日期都转换为字符串,复制正确的字符并将字符串解析回 Date 会起作用,但我想知道是否有更简单、更清洁的方法。
【问题讨论】:
-
从您的描述看来,您真正想要的是让
b与a具有相同的日期值。如果您也可以复制“一天中的时间”(小时、分钟、秒、毫秒),您可以简单地使用a.setTime(b.getTime());。这将有效地将确切的时间戳从一个日期对象“克隆”到另一个日期对象。当你直接构造“a”时,你甚至可以这样做。const a = new Date(b.getTime());。 Docs forsetTime()here. -
此外,JavaScript
Date通常被认为令人沮丧。根据您对日期对象的实际使用量,可能值得使用库来帮助使其更简单。我建议查看luxon。在 JavaScript 中处理日期时,它使许多事情变得更简单。
标签: javascript angular typescript ionic-framework