比较JavaScript中的两个日期

时间:2009-11-01 17:28:18

标签: javascript

我想比较两个日期。我有这个代码,我认为这将是一种享受,但事实并非如此。现在我只想在结束日期小于开始日期时发出错误警告。对于此之前的其他事件,日期样式yyyy-mm-dd需要以此格式保留。这段代码有什么问题?

   startdate = "2009-11-01" ;
   enddate  = "2009-11-04" ;

   var d1 = new Date(startdate)
   var d2 = new Date(enddate)

   if (d2 < d1) {
      alert ("Error ! ) ;
   }

   document.cookie='st =' + startdate // set sytem cookie
   document.cookie='en =' + enddate
   window.location = self.location.href
   window.opener.location.reload()
   close()

7 个答案:

答案 0 :(得分:11)

尝试使用DateJS,这是一个可以处理几乎所有内容的开源JavaScript日期库!以下示例正在运行:

<script type="text/javascript" src="date.js"></script>
<script>

    startdate = "2009-11-01";
    enddate  = "2009-11-04"; 

    var d1 = Date.parse(startdate);
    var d2 = Date.parse(enddate) ;

    if (d1 < d2) {
        alert ("Error!");
    }

</script>

答案 1 :(得分:3)

Date构造函数无法解析该格式,并且由于您无法更改它,因此您应手动解析它,并将yearmonthdate部分传递给它,例如:

function compareDates(startDate, endDate) {

  // parse a date in yyyy-mm-dd format
  function parseDate(input) {
    var parts = input.match(/(\d+)/g);
    return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
  }

  if (parseDate(endDate) < parseDate(startDate)) {
    alert ("Error !");
  }
}

用法:

var startDate = "2009-11-01",
    endDate = "2009-11-04";
compareDates(startDate, endDate);    

答案 2 :(得分:3)

var myDate=new Date();
myDate.setFullYear(2010,0,14);
var today = new Date();

if (myDate>today)
{
    alert("Today is before 14th January 2010");
}
else
{
    alert("Today is after 14th January 2010");
}

来源:http://www.w3schools.com/jS/js_obj_date.asp

答案 3 :(得分:3)

有人最终使用ISO 8601标准日期,但随后......

你正在使用一个很好的国际标准,JavaScript可以理解。但事实并非如此。

问题是您的日期采用ISO 8601标准格式,内置Date.parse()无法读取。

JavaScript实现了RFC 822 / 1123中较旧的IETF日期。一种解决方案是将它们调整为RFC样式,您可以看到in RFC1123,它看起来像 dd month yyyy

有关于可以全面扫描ISO格式的编码浮动,现在你知道google的“iso标准日期”,你可以得到它。 Over here我发现了这个:

Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    this.setTime(Number(time));
}

js> t = new Date()
Sun Nov 01 2009 09:48:41 GMT-0800 (PST)
js> t.setISO8601("2009-11-01")
js> t

Sat Oct 31 2009 17:00:00 GMT-0700 (PDT)

11-01会在我的时区重新解释,只要您的所有日期获得相同的转换,然后他们应该合理地进行比较,否则您可以将TZ信息添加到您的字符串或Date对象。

答案 4 :(得分:1)

如果您只需要知道一个日期是否在另一个之前,您可以使用Date对象的getTime()方法来比较自1970年1月1日午夜以来它们各自的毫秒数:

if( d2.getTime() < d1.getTime() )
{
    alert("eeeek!");
}

---不要混淆并尝试使用getMilliseconds(),但是:)

w3schools documentation on getTime()

答案 5 :(得分:-1)

在javascript中使用此函数进行日期比较:

    function fn_DateCompare(DateA, DateB) {
      var a = new Date(DateA);
      var b = new Date(DateB);

      var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate());
      var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate());

      if (parseFloat(msDateA) < parseFloat(msDateB))
        return -1;  // less than
      else if (parseFloat(msDateA) == parseFloat(msDateB))
        return 0;  // equal
      else if (parseFloat(msDateA) > parseFloat(msDateB))
        return 1;  // greater than
      else
        return null;  // error
  }

答案 6 :(得分:-1)

我根据当前时间实施了以下代码进行日期比较 -

// get the current time from a hidden input which is being set by server time 
// because client may have a wrong time
var ch = jQuery('#clockHours').val(); // e.g. 9,10 etc.
ch = parseInt(ch);
// get the today's date from a server value as well
var td = jQuery('#clockDate').val(); // may be => new Date(); e.g. 2014-05-15
td = Date.parse(td);
td.setHours(0, 0, 0, 0);
// get the input date
var inpdate = jQuery('#jform_in_date').val(); // may be => new Date(); e.g. 2014-05-15
inpdate = Date.parse(inpdate);
inpdate.setHours(0, 0, 0, 0);
// get yesterday's date. this is from server as well
yd = new Date();
yd.setFullYear(td.getFullYear(), td.getMonth(), td.getDate()-1);
yd.setHours(0, 0, 0, 0);
alert('today\'s date is: '+td.toString());
alert('yesterday\'s date is: '+yd.toString());
// if it is not 10 AM then dates from yesterday are valid
if(ch <= 9) {
   if(inpdate.getTime() >= yd.getTime()) {
       alert('Valid: dates from yesterday are allowed');
   } else {
       alert('Invalid: dates before yesterday are not allowed');
   }
} else {
   if(inpdate.getTime() >= td.getTime()) {
       alert('Valid: dates from today are allowed');
   } else {
       alert('Invalid: dates before today are not allowed');
   }
}

我希望这会非常清楚。