我有两种此格式的日期18-Aug-2010
和19-Aug-2010
。如何确定哪个日期更大?
答案 0 :(得分:8)
您需要创建自定义解析函数来处理所需的格式,并获取要比较的日期对象,例如:
function customParse(str) {
var months = ['Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec'],
n = months.length, re = /(\d{2})-([a-z]{3})-(\d{4})/i, matches;
while(n--) { months[months[n]]=n; } // map month names to their index :)
matches = str.match(re); // extract date parts from string
return new Date(matches[3], months[matches[2]], matches[1]);
}
customParse("18-Aug-2010");
// "Wed Aug 18 2010 00:00:00"
customParse("19-Aug-2010") > customParse("18-Aug-2010");
// true
答案 1 :(得分:3)
您可以手动为您的给定格式进行解析,但我建议您使用date.js库将日期解析为Date对象,然后进行比较。 看看它真棒!
而且,它是js实用工具箱的一个很好的补充。
答案 2 :(得分:3)
原生Date
可以解析“MMM + dd yyyy”,它给出了:
function parseDMY(s){
return new Date(s.replace(/^(\d+)\W+(\w+)\W+/, '$2 $1 '));
}
+parseDMY('19-August-2010') == +new Date(2010, 7, 19) // true
parseDMY('18-Aug-2010') < parseDMY('19-Aug-2010') // true
答案 3 :(得分:1)
首先,'dd-MMM-yyyy'格式不是Date
构造函数的可接受输入格式(它返回“无效日期”对象),因此我们需要自己解析它。让我们编写一个函数,以这种格式从字符串中返回Date
对象。
function parseMyDate(s) { var m = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec']; var match = s.match(/(\d+)-([^.]+)-(\d+)/); var date = match[1]; var monthText = match[2]; var year = match[3]; var month = m.indexOf(monthText.toLowerCase()); return new Date(year, month, date); }
Date
个对象隐式地对一个数字进行类型转换(自1970年以来的毫秒数;纪元时间),因此您可以使用常规比较运算符进行比较:
if (parseMyDate(date1) > parseMyDate(date2)) ...
答案 4 :(得分:0)
更新:IE10,FX30(可能更多)会理解&#34; 2010年8月18日&#34;没有短划线 - Chrome处理
所以Date.parse("18-Aug-2010".replace("/-/g," "))
适用于这些浏览器(及更多)
因此
function compareDates(str1,str2) {
var d1 = Date.parse(str1.replace("/-/g," ")),
d2 = Date.parse(str2.replace("/-/g," "));
return d1<d2;
}