在JS中比较两个日期

14

我想比较用户的生日和今天的日期,并获取它们之间的天数。他们输入的生日将以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而不是使用"Christmas",应该怎么做?

当我使用 difference = today - element.value 时,它不会显示差异。警告框显示为 NaN


可能是重复的问题:使用JavaScript比较2个日期 - Widor
1
@widor 不是的,我的问题很具体... - BigBug
1
你的问题很具体,但是那个问题回答了它。 - Blender
@Blender - 实际问题(尽管标题不是这样)似乎是“为什么difference = today - element.value返回NaN?”。链接的问题试图确定一个日期是否大于、小于或等于另一个日期。这个问题是关于确定两个日期之间的天数。日期比较已经在这里正确地完成,所以那个答案并没有真正帮助。真正的答案是在比较之前将字符串解析为日期。 - gilly3
这个回答解决了你的问题吗?如何计算两个日期之间的天数? - starball
2个回答

142

我编写了一个轻量级的日期库,叫做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/


5
Moment可以让日期格式化和操作变得简单明了。做得太棒了! - RevNoah
4
瞬间是世界上最美好的事情。 - jtromans
3
此刻,时刻震撼! - chridam
非常好的插件。处理日期和区域设置真是让人头疼。 - Moonstar
美妙的库,日期痛苦瞬间消失! - Avagut
不确定“轻量级”如何衰老(https://github.com/moment/moment/issues/3376)。另外,请参考https://momentjs.com/docs/#/-project-status/。 - starball

11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接