如何将月份值从一个日期对象复制到另一个日期对象?[复制]

共5个回答,已解决, 标签: javascript angular typescript ionic-framework

这个问题在这里已经有了答案:

给定两个日期对象,如何将第一个对象的月份正确设置为另一个对象的月份?

我面临着从一个日期对象复制到另一个日期对象的日、月和年的任务。复制日与年按预期工作,当我试图复制月时,问题就出现了。

使用b.setMonth(a.getMonth())结果 b 月份太多了。

使用b.setMonth(a.getMonth() - 1)然而,结果是 b 的月份比要求的月份少了一个月。

以下打字稿代码:

设 a = 新日期 (2018,1,12);
让 b = 新的日期 ();
控制台日志 (a);
控制台日志 (b);

控制台日志 ('=');
控制台日志 (a.getMonth ());
控制台日志 (b.getMonth ());

B.setMonth (a.getMonth ());

控制台日志 ('=');
控制台日志 (a.getMonth ());
控制台日志 (b.getMonth ());


B.setMonth (a.getMonth ()-1);

控制台日志 ('=');
控制台日志 (a.getMonth ());
控制台日志 (b.getMonth ());

退货:

2018年2月12日星期一 00:00:00 GMT 0100
2019年8月29日 16:11:03 GMT 0200
====
1
7
====
1
2
====
1
0/2-1 = 0?

貌似 2-1 应该给 1(a.getMonth() - 1),但是日期对象的行为显然不同。在 javascript/打字稿中,将月份从一个日期对象复制到另一个日期对象的正确方式是什么?我想将两个日期转换为字符串,复制正确的字符并将字符串解析回日期会起作用,但是我想知道是否有一种更简单、更干净的方法。

第1个答案(采用)

问题是,setMonth()方法有一个可选的第二个参数,即日期 (文档)。如果您没有为日期提供值,它将自动使用日期之一。

所以,你的 A 日期是 2018 年 2 月 12 日,而你的 B 日期是 2019 年 8 月 29 日。

通过做b.setMonth(a.getMonth()); you are implicitly saying b.setMonth(1,29);(1 是 a.getMonth (),29 是 b 日期的日期)。

因此,你试图将日期设定为 2 月 29 日,这是 2019 年不可能的,它会将月份从一个月转移到另一个月 (第二个月)。

如果你这样做b.setMonth(a.getMonth() -1);你将它设置为 1 月 29 日,这是可能的,所以你可以将 1 月作为一个月 (第一个月)。

第2个答案

因为今天是你的幸运日。这是你工作的特定日期。

2 月今年只有 28 天。当你将 “2019 年 8 月 29 日” 的月份设置为 2 月时,你试图创建无效的日期 “2019 年 2 月 29 日”。直到 “2019 年 3 月 1 日” 才结束。

如果你昨天尝试了这个实验,你就不会看到这个问题了。

第3个答案

这一问题在数天的每个。

当你这样做:

B.setMonth (a.getMonth ());

你得到了 b 日期,但是以 2 月为月份: 2019 年 2 月 29 日 16:11:03 GMT 0200

2 月和 2019 年没有 29 天。所以日期实际上是 3 月 1 日: 2019 年 3 月 01 日 16:11:03 GMT 0200

这就是为什么你在第二组控制台日志中获得第二个月。

最后,你设置的是 b.月而不是 a.月,所以从 a 日期 (从 2 月到 1 月) 减去一个月。

第4个答案

因为你使用的是 getMonth () 而不是 getMonth ()。 所以你的主要月份是 1 而不是 2。

第5个答案

在设置月份时,您还需要指定可以使用此代码的日期

Var a = 新日期 (2018 、 1 、 12);
新日期 ();
控制台日志 (a);
控制台日志 (b);

控制台日志 ('=');
控制台日志 (a.getMonth ());
控制台日志 (b.getMonth ());

B.setMonth (a.getMonth (),1);

控制台日志 ('=');
控制台日志 (a.getMonth ());
控制台日志 (b.getMonth ());


B.setMonth (a.getMonth ()-1,1);

控制台日志 ('=');
控制台日志 (a.getMonth ());
控制台日志 (b.getMonth (); </code> </pre>

相关问题

如何从异步调用返回响应? 循环中的 JavaScript 闭包--简单的实际示例 如何从异步调用返回响应? 从 angularcli 中的 HTTP Get 请求检索到的数组的范围 如何将角2前置快速 JS 变量导出到角2分量? Angular block web 请求使用的服务器吗? 在类实例中跟踪状态 如何解决: &ldquo;找不到规则 &#39;@ typescript-eslint/一致类型断言&#39; 的定义&rdquo; 如何将月份值从一个日期对象复制到另一个日期对象?[复制] 游戏服务中存在的问题--基于离子的测量 谷歌 6月17日 Firebase SDK 更新后,Ionic Cordova 应用程序停止编译