Javascript 如何将月份值从一个日期对象复制到另一个日期对象?
给定两个日期对象,如何正确地将第一个对象的月份设置为另一个对象的月份 我面临的任务是将日期、月份和年份从一个日期对象复制到另一个日期对象。抄写日期和年份是按计划进行的,当我试图抄写月份时,问题就出现了 使用Javascript 如何将月份值从一个日期对象复制到另一个日期对象?,javascript,angular,typescript,ionic-framework,Javascript,Angular,Typescript,Ionic Framework,给定两个日期对象,如何正确地将第一个对象的月份设置为另一个对象的月份 我面临的任务是将日期、月份和年份从一个日期对象复制到另一个日期对象。抄写日期和年份是按计划进行的,当我试图抄写月份时,问题就出现了 使用b.setMonth(a.getMonth())会导致b的月份过多 但是,使用b.setMonth(a.getMonth()-1)会导致b的月份比要求的月份少 以下类型脚本代码: let a=新日期(2018年1月12日); 设b=新日期(); 控制台日志(a); 控制台日志(b); cons
b.setMonth(a.getMonth())
会导致b的月份过多
但是,使用b.setMonth(a.getMonth()-1)
会导致b的月份比要求的月份少
以下类型脚本代码:
let a=新日期(2018年1月12日);
设b=新日期();
控制台日志(a);
控制台日志(b);
console.log('=');
log(a.getMonth());
log(b.getMonth());
b、 setMonth(a.getMonth());
console.log('=');
log(a.getMonth());
log(b.getMonth());
b、 setMonth(a.getMonth()-1);
console.log('=');
log(a.getMonth());
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)
,但日期对象的行为显然不同。在javascript/typescript中,将月份从一个日期对象复制到另一个日期对象的正确方法是什么?我想将两个日期都转换为字符串,复制正确的字符并将字符串解析回日期都可以,但我想知道是否有更简单、更清晰的方法。因为您使用的是a.getMonth()而不是b.getMonth()。
所以你的主要月份是1,而不是2。这是因为这是你的幸运(或不幸运!)日。这是你工作的具体日期 今年二月只有28天。当您将“2019年8月29日”设置为2月时,您试图创建无效日期“2019年2月29日”。这四舍五入到“2019年3月1日”
如果您昨天尝试过这个实验,您就不会看到这个问题。问题在于
setMonth()
方法有一个可选的第二个参数,即day()。如果不提供日期的值,它将自动使用其中一个日期
因此,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月(第2个月)
如果您执行b.setMonth(a.getMonth()-1)代码>您将其设置为1月29日,这是可能的,因此您可以将1月作为一个月(第1个月)。在设置月份时,您还需要指定可以使用此代码的日期
var a=新日期(2018年1月12日);
var b=新日期();
控制台日志(a);
控制台日志(b);
console.log('=');
log(a.getMonth());
log(b.getMonth());
b、 setMonth(a.getMonth(),1);
console.log('=');
log(a.getMonth());
log(b.getMonth());
b、 setMonth(a.getMonth()-1,1);
console.log('=');
log(a.getMonth());
log(b.getMonth())代码>这是一个每月天数的问题
当您这样做时:
b.setMonth(a.getMonth());
您将获得b日期,但二月为月份:周四2019年2月29日16:11:03 GMT+0200
2019年2月没有29天。所以日期实际上是3月1日:2019年3月1日星期四16:11:03 GMT+0200
这就是为什么在第二组控制台日志中会出现第2个月
最后,您将b.month设置为a.month,而不是a.month,因此从a日期(从2月到1月)中减去一个月。从您的描述中,听起来您真正想要的是使b
具有与a
相同的日期值。如果您也可以在“一天中的某个时间”(小时、分钟、秒、毫秒)内进行复制,那么只需使用a.setTime(b.getTime())代码>。这将有效地“克隆”从一个日期对象到另一个日期对象的确切时间戳。您甚至可以在直接构造“a”时执行此操作<代码>常量a=新日期(b.getTime())代码>。另外,JavaScriptDate
通常被认为是令人沮丧的。根据您实际处理日期对象的程度,使用库来帮助简化可能是值得的。我建议退房。在JavaScript中处理日期时,它使许多事情变得更加简单。