将String与今天的日期进行比较

时间:2015-06-16 21:39:25

标签: javascript

我的日期格式为" 2015年6月16日及#34;我需要将它与今天的日期进行比较,看它不大。

由于我的输入日期是一个字符串,我首先转换为日期对象:

new Date("16-Jun-2015");

然后我把它与今天的日期进行比较:

if(date.compare(new Date("16-Jun-2015"), new Date()) > 0){
   //Do stuff if input is larger than today's date
}

新日期(" 16-Jun-2015")会返回值' 无效日期。'我如何比较这些日期?我也不能使用任何第三方日期库,因为我不拥有我正在使用的整个代码库。

重复的问题消息不正确,因为该问题仅显示解析,但不显示比较。

2 个答案:

答案 0 :(得分:2)

查看JavaScript中Date对象周围的the documentation

从本质上讲,您对new Date('16-Jun-2015')的使用是无效的,因为Date构造函数需要非常特定的输入格式。

这意味着您需要将日期格式(“2015年6月16日”)转换为兼容格式,ISO-8601RFC2822

将日期格式转换为这些标准之一是不可避免的。使用第三方库(例如Moment.js

)可以更轻松地完成此过程

答案 1 :(得分:1)

由于您提供的格式未标准化,因此不保证Date构造函数支持该格式。

有多种方法可以解决这个问题,但最简单的方法是使用像moment.js这样的库,它有自己的解析函数,可以用格式说明符控制。

例如:

if (moment("16-Jun-2015","D-MMM-YYYY").isAfter())
    ...

请注意,在此示例中,isAfter函数使用当前日期和时间,因为它未传递任何参数。

但是,由于您说您无法使用库,请考虑使用您自己的简单解析函数,例如:

var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];

function parseDate(s){
    var parts = s.split("-");
    var d = parts[0];
    var m = months.indexOf(parts[1]);
    var y = parts[2];
    return new Date(y, m, d);
}

你可以简单地这样打电话:

if (parseDate("16-Jun-2015") > new Date())
    ...