【问题标题】:Get difference between 2 dates in javascript在javascript中获取2个日期之间的差异
【发布时间】:2016-11-03 13:31:49
【问题描述】:

var date1 = new Date("04.11.2016");
var date2 = new Date("19.11.2016");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays);

尝试在这些日期之间有所不同,但我的日期格式是“04.11.2016”,结果显示 NaN

【问题讨论】:

  • 你试过记录日期吗? date2 为空
  • date2 是无效日期。您已通过 'DD-MM-YYYY',但它应该是 'MM-DD-YYYY' (11.19.2016)

标签: javascript


【解决方案1】:

var date1 = new Date("11/04/2016");
var date2 = new Date("11/19/2016");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays);

更改日期格式。

应该是MM/DD/YYYY

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    最简单的方法是使用moment.js库:

    var date1 = moment('04.11.2016', 'MM.DD.YYYY'),
        date2 = moment('19.11.2016', 'MM.DD.YYYY'),
        diffDays = date2.diff(date1, 'days'); // you can wrap it in Math.abs()
    

    丑陋的js方式:

    var input1 = '04.11.2016',
        parts1 = input1.split('.'),
        date1 = new Date(parts1[2], parts1[1], parts1[0]),
        input2 = '19.11.2016',
        parts2 = input2.split('.'),
        date2 = new Date(parts2[2], parts2[1], parts2[0]),
        timeDiff = Math.abs(date2.getTime() - date1.getTime()),
        diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
    

    【讨论】:

      【解决方案3】:

      更改月份和日期顺序首先应该是月份,然后是日期... MM/DD/YYYY

      var date1 = new Date("11.04.2016");
      var date2 = new Date("11.19.2016");
      var timeDiff = Math.abs(date2.getTime() - date1.getTime());
      var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
      alert(diffDays);

      【讨论】:

        【解决方案4】:

        您的第二个日期不正确。解析器正在考虑这种格式 MM.DD.YYY,而您提供的月份超出范围。

        var date1 = new Date("04.11.2016");
        var date2 = new Date("09.11.2016");
        var timeDiff = Math.abs(date2.getTime() - date1.getTime());
        var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
        alert(diffDays);

        【讨论】:

          【解决方案5】:

          日期由年、月、日、小时、分钟、秒和毫秒组成。

          日期对象是使用 new Date() 构造函数创建的。

          有 4 种发起日期的方式:

          新日期() 新日期(毫秒) 新日期(日期字符串) new Date(年、月、日、时、分、秒、毫秒)

          这样你就可以拆分它们然后使用它

          【讨论】:

            【解决方案6】:

            只需将前两行更改如下

            var date1 = new Date(2016,11,4);
            var date2 = new Date(2016,11,19);
            

            【讨论】:

              【解决方案7】:

              new date("mm dd yyyy") 格式错误

              (function () {
              var date1 = new Date("11 04 2016");
              var date2 = new Date("11 19 2016");
              var timeDiff = Math.abs(date2.getTime() - date1.getTime());
              var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
              console.log(diffDays);
              })()

              【讨论】:

                【解决方案8】:

                JS 期望日期在MM-DD-YYYY 而不是DD-MM-YYYY。理想的方法是使用 moment.js,但你可以使用这样的东西:

                function createCustomDate(dateString){
                  var dateArr = dateString.split(/[^0-9]/).reverse().join("-")
                  return new Date(dateArr);
                }
                
                var dateStr1 = "04.11.2016";
                var dateStr2 = "19.11.2016";
                var date1 = createCustomDate(dateStr1);
                var date2 = createCustomDate(dateStr2);
                var timeDiff = Math.abs(date2.getTime() - date1.getTime());
                var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
                console.log(diffDays);

                【讨论】:

                  【解决方案9】:
                  new Date("19.11.2016");
                  

                  这是无效日期。所以,区别是 NaN 。

                  将格式更改为mm/dd/yyyy 即可。

                  【讨论】:

                    【解决方案10】:

                    你可以使用moment.js

                    d = moment('11.16.2016') // here date format was in "MM.DD.YYYY"
                    e = moment('11.04.2016') // here date format was in "MM.DD.YYYY"
                    getDiffbydays = e.diff(d,'days') // get diff by days you can use day
                    getDiffbyyears = e.diff(d,'year') // get diff by years you can use year 
                    getDiffbymonth = e.diff(d,'month') // get diff by months you can use month
                    

                    【讨论】:

                      【解决方案11】:

                      查看这个解决方案,它使用一个名为getDate 的函数将"04.11.2016" 格式的日期字符串转换为JavaScript Date 对象。

                      function getDate(dateStr) {
                        var arr = dateStr.split('.');
                      
                        return new Date(arr[2], arr[1], arr[0]);
                      }
                      
                      var start = getDate("04.11.2016");
                      var end = getDate("19.11.2016");
                      var timeDiff = Math.abs(end.getTime() - start.getTime());
                      var diffDays = Math.ceil(timeDiff / (1000 * 60 * 60 * 24))
                      console.log('Number of days: ' + diffDays);

                      为了使用此代码在 Google 跟踪代码管理器中创建自定义 JavaScript 变量,您可以修改上述代码或您选择在函数中的代码 - reference

                      【讨论】:

                      • @MargubAlam,您能否发布实际的错误消息以及您在哪个环境中执行该代码?
                      • 第 7 行错误,字符 1:解析错误。 ')' 预期 - screencast.com/t/KQLEF0yF8E
                      • @MargubAlam,检查我更新的答案,我必须弄清楚你在哪个环境中执行该代码,通过谷歌搜索我能够知道它被称为谷歌标签管理器,刚刚看到它第一次并按照您的屏幕截图创建自定义 JavaScript
                      • 乐于助人。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。您可以从这里stackoverflow.com/tour 参观 Stack Overflow
                      猜你喜欢
                      • 1970-01-01
                      • 2014-02-17
                      • 2011-03-14
                      • 1970-01-01
                      • 2020-03-22
                      • 2017-03-27
                      • 2010-09-22
                      • 1970-01-01
                      相关资源
                      最近更新 更多