比较JavaScript中的两个日期

Mic*_*ick 6 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()
Run Code Online (Sandbox Code Playgroud)

Fil*_*eca 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>
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 3

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

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

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

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

有一些编码可以全面扫描 ISO 格式,现在您知道可以通过 google 搜索“iso 标准日期”来获取它。在这里我发现了这个:

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)
Run Code Online (Sandbox Code Playgroud)

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