JavaScript帮助 - 以(dd / MMM / yyyy)格式比较两个日期

时间:2010-05-11 16:59:39

标签: javascript date compare

我正在尝试比较aspx表单上的两个文本框值。这两个值都代表日期。它们的格式类似于“dd / MMM / yyyy”。如何在JavaScript中比较它们以确定它们是否相等以及哪一个更大等等?

JavaScript是否有像这样的字符串的日期构造函数?任何提示将不胜感激。

5 个答案:

答案 0 :(得分:3)

你想使用Date.parse() 所以要以毫秒为单位转换为Unix时间戳:

var d = Date.parse("Jul 8, 2005");
> 1120773600000 

您现在可以将日期作为整数值进行操作。

答案 1 :(得分:0)

将日期转换为UNIX时间戳,然后只比较值。

if (date1.getTime() > date2.getTime()) alert("bla");

为了更精确一点,getTime函数返回自1970/01/01以来的毫秒数:http://www.w3schools.com/jsref/jsref_getTime.asp

关于UNIX时间的一些解释:http://en.wikipedia.org/wiki/Unix_time

答案 2 :(得分:0)

了解Date object

答案 3 :(得分:0)

可悲的是,Date.parse方式不可靠,甚至不适用于ISO格式。

下面是一个快速的一次性功能,用于解析您当前使用的格式的日期。如果你喜欢你可以添加一些健全性检查,看看这一天是否在每个月的范围内(不要忘记leapyear然后:)),但如果一个人有合理的控制权,那么这就行了。

function parseThisYourVeryKnownFormatToDate(dateString /* '12/Jun/2010' */) {
  function getMonthIdx(monthName) {
    var months = {
      'Jan':0, 'Feb':1, 'Mar':2, 'Apr':3, 'May':4, 'Jun':5
      , 'Jul':6, 'Aug':7, 'Sep':8, 'Oct':9, 'Nov':10, 'Dec':11
    };
    return months[monthName];
  }
  var format = /^(\d+)\/(\w{3})\/(\d{4})$/;
  var match = format.exec(dateString);
  if (!match) {return undefined;}
  var day = match[1], monthIdx = getMonthIdx(match[2]), year = match[3];
  return new Date(year, monthIdx, day);
}

var testDates = ['10/Jan/2008', '15/Jun/1971', '31/Dec/1999', 'bogus/date/foo'];
for (var idx=0, len=testDates.length; idx<len; ++idx) {
  console.log(parseThisYourVeryKnownFormatToDate(testDates[idx])); // real date objects, except for the last
}

var d0 = (parseThisYourVeryKnownFormatToDate('15/Apr/2009'));
var d1 = (parseThisYourVeryKnownFormatToDate('12/Apr/2009'));
console.log(d0+' is after '+d1+': '+(d0.getTime()>d1.getTime())); // says true
console.log(d1+' is after '+d0+': '+(d1.getTime()>d0.getTime())); // says false
console.log(d0+' is after '+d0+': '+(d0.getTime()>d0.getTime())); // says false

答案 4 :(得分:0)

如果您只想进行比较,那么您可以这样做:

compareDates(d1, d2) {
  d1 = d1.split("/").reverse().join("/");
  d2 = d2.split("/").reverse().join("/");
  return d1 == d2 ? 0 : d1 < d2 ? : -1 : 1;
}

假设参数的格式为“dd / mm / yyyy”,如果d1 == d2,则该函数将返回0,如果d1 d2,则d2和1; D2。

PS:如果您的阵列不知道如何reverse,请教他们如何:

Array.prototype.reverse = function() {
 var a = [];
 for(var i=this.length; i; i--) a.push(this[i-1]);
 return a;
}
编辑:好的,我没有注意到“MMM”格式。我想我会使用月份名称的哈希值。

function compareDates(date1,date2) {
 var d1 = date1.split("/").reverse();
 var d2 = date2.split("/").reverse();

 var months = { 'Jan':'01', 'Feb':'02' }; // ...

 d1[1] = months[d1[1]] || '00';
 d2[1] = months[d2[1]] || '00';

 date1 = d1.join("/");
 date2 = d2.join("/");

 return date1 == date2 ? 0 : date1 < date2 ? : -1 : 1;
}