【问题标题】:Compare two dates in JS比较JS中的两个日期
【发布时间】:2011-12-20 18:31:25
【问题描述】:

我想将用户的生日与今天的日期进行比较,并获取两者之间的天数。他们输入的生日将以 12/02/1987 的形式在 text

类型的输入框中输入

在我的 JS 文件中,我的代码如下所示:

function validateDOB(element) {
var valid = false;

var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //do that January is NOT represented by 0!
var yyyy = today.getFullYear();

if (dd < 10) {
    dd = '0' + dd
}
if (mm < 10) {
    mm = '0' + mm
}

var today = mm + '/' + dd + '/' + yyyy;
alert(today);
if (element.value != today) {
    var days = 0;
    var difference = 0;

    Christmas = new Date("December 25, 2011");

    today = new Date();

    difference = today - Christmas

    days = Math.round(difference / (1000 * 60 * 60 * 24)-1);
    alert(days); 
    valid = true;
}

我想比较element.value而不是使用“圣诞节”...我该怎么做?

当我输入difference = today - element.value 时,它不会向我显示差异。警报框显示为NaN

【问题讨论】:

  • Compare 2 dates with JavaScript 的可能重复项
  • @widor 不,我的 Q 是特定的......
  • 你的问题很具体,是的,但是这个问题回答了它。
  • @Blender - 真正的问题(尽管它的标题)似乎是“为什么difference = today - element.value 返回NaN?”。链接的问题试图确定一个日期是否大于、小于或等于另一个日期。这个问题是关于确定两个日期之间的天数。日期比较已在此处正确完成,因此答案并没有真正帮助。真正的答案是在比较之前将字符串解析为日期。

标签: javascript html forms date


【解决方案1】:

我编写了一个名为 Moment.js 的轻量级日期库来处理这样的事情。

var birthday = moment('12/02/1987', 'MM-DD-YYYY');
var inputDate = moment(element.value, 'MM-DD-YYYY');
var diff = birthday.diff(inputDate, 'days'); 

http://momentjs.com/docs/#/displaying/difference/

【讨论】:

  • Moment 为日期格式和操作带来了很多痛苦。很棒的工作。
  • 瞬间是世界上最好的东西。
  • 此时此刻,震撼!
  • 非常好的插件。处理日期和地区是一件很痛苦的事情。
  • 美丽的图书馆,约会之痛一去不复返!
【解决方案2】:

您需要先将 element.value 解析为日期:

difference = today - new Date(element.value);

http://jsfiddle.net/gilly3/3DKfy/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2013-11-29
    相关资源
    最近更新 更多