比较JS中的两个日期

Posted

技术标签:

【中文标题】比较JS中的两个日期【英文标题】:Compare two dates in 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?”。链接的问题试图确定一个日期是否大于、小于或等于另一个日期。这个问题是关于确定两个日期之间的天数。日期比较已在此处正确完成,因此答案并没有真正帮助。真正的答案是在比较之前将字符串解析为日期。 【参考方案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/

【讨论】:

以上是关于比较JS中的两个日期的主要内容,如果未能解决你的问题,请参考以下文章

如何用JS比较两个日期时间的大小呢?

JS 如何比较时间大小?

js关于日期比较大小

JS通过一个值与日期比较计算天数

js中如何比较两个时间大小

delphi日期时间比较大小