【问题标题】:How do I do a Date comparison in Javascript? [duplicate]如何在 Javascript 中进行日期比较? [复制]
【发布时间】:2010-09-25 04:56:09
【问题描述】:

我想在 javascript 中比较两个日期。我一直在做一些研究,但我能找到的只是如何返回当前日期。我想比较与今天无关的 2 个不同的日期。我怎么做。

var startDate = Date(document.form1.Textbox2);

【问题讨论】:

    标签: javascript datetime


    【解决方案1】:
    if (date1.getTime() > date2.getTime()) {
        alert("The first date is after the second date!");
    }
    

    Reference to Date object

    【讨论】:

    • 我有这个建议,但是 getTime 函数返回一个未定义的值。我认为我不太了解 getTime()。这应该是预定义的功能吗?
    • 好像chrome和firefox支持date1 > date2,也就是说,没有getTime()部分。有人知道其他浏览器吗?
    • @Linus 我不相信实现能正确地做到这一点。安全总比后悔好,是吗?
    • @JonathanDumaine 同意,认为它看起来更好:)
    【解决方案2】:
    new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf()
    

    【讨论】:

    • 工作正常,谢谢
    • @VladimirShmidt:它在 Firefox 中不起作用。
    • @AjayBarot 已在最新的 FireFox 中检查效果良好
    【解决方案3】:

    JavaScript 的日期可以使用与其他数据类型相同的比较运算符进行比较:>、=、==、!=、===、!==。

    如果你有两个日期 A 和 B,那么 A

    但听起来您遇到的麻烦是将字符串转换为日期。您只需将字符串作为新日期的参数传递即可:

    var someDate = new Date("12/03/2008");
    

    或者,如果您想要的字符串是表单字段的值,看起来可能是:

    var someDate = new Date(document.form1.Textbox2.value);
    

    如果该字符串不是 JavaScript 识别为日期的字符串,您仍然会得到一个 Date 对象,但它将是“无效的”。与另一个日期的任何比较都将返回 false。当转换为字符串时,它将变为“无效日期”。它的 getTime() 函数将返回 NaN,在日期本身调用 isNaN() 将返回 true;这是检查字符串是否为有效日期的简单方法。

    【讨论】:

    • 如果字符串无法解析为日期会怎样?
    • 这不适用于 ==(至少在 firefox 上)。直接比较两个日期总是返回 false,你必须使用上面提到的 getTime()。
    • 在 Visual Studio 2010 javascript 调试器中:?(new Date('1995-02-04T24:00') == new Date('1995-02-05T00:00')); false?(new Date('1995-02-04T24:00').getTime() == new Date('1995-02-05T00:00').getTime()); true
    • new Date("12/1/2015") !== new Date("12/1/2015"),所以说你比较像“其余数据类型”这样的javascript日期是充其量是误导。投反对票。
    • ==, !=, ===, !=== 不起作用。此外,没有 !=== 运算符。
    【解决方案4】:

    您可以在 Date 对象上使用 getTime() 方法来获取相对于 1970 年 1 月 1 日的时间戳(以毫秒为单位)。如果将两个日期转换为整数时间戳,则可以通过减去它们来比较差异。结果将以毫秒为单位,因此您只需除以 1000 秒,然后除以 60 分钟,等等。

    【讨论】:

      【解决方案5】:

      我宁愿使用 Date valueOf 方法而不是 === 或 !==

      似乎 === 正在比较内部对象的引用,而与日期无关。

      【讨论】:

      • 我喜欢这种方法,因为它正确地将日期时间解释为自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,因此执行类似 myDate.valueOf() == anotherDate.valueOf() 的操作可以完全正确匹配到毫秒。
      【解决方案6】:
      function fn_DateCompare(DateA, DateB) {     // this function is good for dates > 01/01/1970
      
          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;  // lt
          else if (parseFloat(msDateA) == parseFloat(msDateB))
            return 0;  // eq
          else if (parseFloat(msDateA) > parseFloat(msDateB))
            return 1;  // gt
          else
            return null;  // error
      }
      

      【讨论】:

      • 将一个添加到a/b.getMonth() 会导致一月(即0)变为1,这会将二月转换为Date.UTC 方法。请参阅 mdn 文章:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。关于month 参数可接受值的部分。例如,尝试使用您的函数比较日期“2/1/2017”和“1/31/2017”。
      【解决方案7】:
          function validateform()
          {
           if (trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value) != "") {
         if (!isDate(trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value)))
               msg = msg + "<li>Please enter valid From Date in mm/dd/yyyy format\n";
         else {
             var toDate = new Date();
             var txtdate = document.getElementById("<%=txtFromDate.ClientID %>").value;
             var d1 = new Date(txtdate)
         if (Date.parse(txtdate) > Date.parse(toDate)) {                   
               msg = msg + "<li>From date must be less than or equal to today's date\n";
         }
        }
      }
      
           if (trimAll(document.getElementById("<%=txtToDate.ClientID %>").value) != "") {
                  if (!isDate(trimAll(document.getElementById("<%=txtToDate.ClientID %>").value)))
                      msg = msg + "<li>Please enter valid To Date in mm/dd/yyyy format\n";
                  else {
                      var toDate = new Date();
                      var txtdate = document.getElementById("<%=txtToDate.ClientID %>").value;
                      var d1 = new Date(txtdate)
      
                      if (Date.parse(txtdate) > Date.parse(toDate)) {
                          msg = msg + "<li>To date must be less than or equal to today's date\n"; 
                        }
                       }
                      }
      

      【讨论】:

        【解决方案8】:

        您可以尝试使用此代码检查两个日期中哪个日期值最高,格式为 MM/DD/YYYY:

        function d_check() {
            var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one
            var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two
        
            if((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) {
                alert("first date is greater");
                return false;
            }
        
            else if((((dl_sdt.substr(0,2)) > (dl_endt.
                substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))||
                (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&&
                ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))||
                (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > 
                (dl_endt.substr(3,2))))) {
                    alert("first date is greater");
                return false;
            }
        
            alert("second date is digher");
            return true;
        }
        

        /*用于检查这个....创建一个表单并为两个日期输入提供 id。日期格式应为 mm/dd/yyyy 或 mm-dd-yyyy 或 mm:dd:yyyy 或 mm.dd。 yyyy 像这样。 */

        【讨论】:

        • 功能很好,除了一点点小东西。假设用户输入将始终遵循给定的日期模式(使用子字符串)。我想我可能会使用它,不过需要进行一些输入验证,谢谢。
        • 这对日期格式做了一些大的假设,并且不使用国际日期标准。
        【解决方案9】:

        您可以尝试添加以下脚本代码来实现:

        if(CompareDates(smallDate,largeDate,'-') == 0) {
            alert('Selected date must be current date or previous date!');
        return false;
        }
        
        function CompareDates(smallDate,largeDate,separator) {
            var smallDateArr = Array();
            var largeDateArr = Array(); 
            smallDateArr = smallDate.split(separator);
            largeDateArr = largeDate.split(separator);  
            var smallDt = smallDateArr[0];
            var smallMt = smallDateArr[1];
            var smallYr = smallDateArr[2];  
            var largeDt = largeDateArr[0];
            var largeMt = largeDateArr[1];
            var largeYr = largeDateArr[2];
        
            if(smallYr>largeYr) 
                return 0;
        else if(smallYr<=largeYr && smallMt>largeMt)
            return 0;
        else if(smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt)
            return 0;
        else 
            return 1;
        }  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-12
          • 1970-01-01
          • 2011-02-23
          • 1970-01-01
          • 2015-10-23
          • 2023-01-15
          • 2018-07-11
          相关资源
          最近更新 更多