【问题标题】:date comparison only compares years日期比较只比较年份
【发布时间】:2015-06-24 09:48:46
【问题描述】:

考虑这段代码:

var from = new Date(document.getElementById("from").value);
var to = new Date(document.getElementById("to").value);
var yeardate = new Date(from.setMonth(from.getMonth()+12));

if (from.getTime() > to.getTime()) {
    alert(from.getTime() > to.getTime());
}

这些字段是 html5 日期字段。

例如我用这个:

from: 2015-06-30

to: 2018-07-31

它输出错误,但是当我这样做时:

from: 2015-06-30

to: 2015-07-31

它输出真,但它应该仍然是假,因为 06-30 不大于 07-31。

它看起来只检查年份,我应该如何解决这个问题?

编辑:

按照@Laxmikant Dange 的建议,我尝试了以下方法。

alert((new Date('2015-06-30').getTime() > new Date('2015-07-31').getTime()));

它现在返回 false,但是当我将对象存储到变量时,如下所示:

var from = new Date('2015-06-30');
var to = new Date('2015-07-31');
alert(from.getTime() > to.getTime());

它再次返回true

【问题讨论】:

标签: javascript html date


【解决方案1】:

检查日期元素的值是多少,可能有问题。这是您的值,这两种情况都返回 false。

getTime() 方法返回的值是自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。 Here 是参考。

所以不是只比较年份。

console.log("case 1",new Date('2015-06-30').getTime() > new Date('2018-07-31').getTime());
console.log("case 2",new Date('2015-06-30').getTime() > new Date('2015-07-31').getTime());

代码中的问题在于这一行。

var yeardate = new Date(from.setMonth(from.getMonth()+12));

您将添加 12 个月。 评论这一行,你会得到预期的结果。

【讨论】:

  • 这真的很奇怪,我测试了你的代码,当我做你做的事情时,它在两种情况下都返回 false。但是当我将它们放入一个变量中时,它再次变为真。
  • @morbidCode,尝试控制日期字段的值,检查返回的内容,
  • 包含“from”字段的日期对象返回1467244800000,包含“to”字段的日期对象返回1438300800000
  • @morbidCode,这是因为您从日期开始添加 12 个月。检查代码中的第三行。
  • 是的,我现在明白了,谢谢。但是当我返回日期时,真的是休息一天吗?就像在我们的示例中一样 new Date('2015-06-30') return jun 29?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 2012-12-29
  • 2020-04-04
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
相关资源
最近更新 更多