Wer*_*rek 9 javascript typescript ionic-framework angular
给定两个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());
Run Code Online (Sandbox Code Playgroud)
返回值:
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 ?
Run Code Online (Sandbox Code Playgroud)
似乎2-1应该给1 (a.getMonth() - 1),但是显然Date对象的行为有所不同。在javascript / typescript中将月份从一个Date对象复制到另一个Date对象的正确方法是什么?我想将两个日期都转换为字符串,复制正确的字符,然后将字符串解析回Date可以,但是我想知道是否有一种更简单,更清洁的方法。
问题在于该setMonth()方法具有可选的第二个参数,即天(DOCS)。如果您没有提供当天的值,它将自动使用日期之一。
因此,您的A日期为2018年2月12日,而您的B日期为2019年8月29日。
这样b.setMonth(a.getMonth());您就隐含地说b.setMonth(1,29);(1是a.getMonth(),而29是b日期的日期)。
因此,您正在尝试将日期设置为2月29日,这在2019年是不可能的,并且它将月份从1转移到3月(第二个月)。
如果您b.setMonth(a.getMonth() -1);将其设置为1月29日,则可以将1月作为一个月(第1个月)。
这是因为这是您幸运的一天。这是您正在工作的特定日期。
今年2月只有28天。当您将“ Aug 29 2019”月份设置为二月时,您正在尝试创建无效的日期“ Feb 29 2019”。舍入到“ 2019年3月1日”。
如果您昨天尝试过此实验,则不会看到此问题。
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |