Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将月份值从一个日期对象复制到另一个日期对象?_Javascript_Angular_Typescript_Ionic Framework - Fatal编程技术网

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())。另外,JavaScript
Date
通常被认为是令人沮丧的。根据您实际处理日期对象的程度,使用库来帮助简化可能是值得的。我建议退房。在JavaScript中处理日期时,它使许多事情变得更加简单。