我的日期格式为" 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")会返回值' 无效日期。'我如何比较这些日期?我也不能使用任何第三方日期库,因为我不拥有我正在使用的整个代码库。
重复的问题消息不正确,因为该问题仅显示解析,但不显示比较。
答案 0 :(得分:2)
查看JavaScript中Date
对象周围的the documentation。
从本质上讲,您对new Date('16-Jun-2015')
的使用是无效的,因为Date构造函数需要非常特定的输入格式。
这意味着您需要将日期格式(“2015年6月16日”)转换为兼容格式,ISO-8601或RFC2822。
将日期格式转换为这些标准之一是不可避免的。使用第三方库(例如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())
...