在javascript中验证此“dd-MMM-yyyy”格式的两个日期

时间:2010-08-18 07:02:37

标签: javascript validation date

我有两种此格式的日期18-Aug-201019-Aug-2010。如何确定哪个日期更大?

5 个答案:

答案 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," "))适用于这些浏览器(及更多)

Live Demo

因此

function compareDates(str1,str2) {
  var d1 = Date.parse(str1.replace("/-/g," ")),
      d2 = Date.parse(str2.replace("/-/g," "));
  return d1<d2;
}