【问题标题】:Javascript/Jquery/Moment.js calculate the number of days between two datesJavascript/Jquery/Moment.js 计算两个日期之间的天数
【发布时间】:2016-09-14 10:29:53
【问题描述】:

我已经用谷歌搜索加载和阅读加载,到目前为止浪费了大约 3 个小时。我不敢相信它如此艰难。

我有一个 Javascript/Jquery 应用程序,我安装了 moment.js 插件。 我正在编写一个 POS 应用程序,我需要计算两个日期之间的天数差,因此我可以警告用户某个特定退回的物品可能太旧而无法退回。

我在 JS 中发现了这段代码,看起来不错,似乎是流行的方法,虽然我无法让它工作

var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date(2008,01,12);
var secondDate = new Date(2008,01,22);

var diffDays = Math.round(Math.abs((firstDate.getTime() -  secondDate.getTime())/(oneDay)));

我也尝试过使用 Moment.js,它再次看起来非常整洁

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var x = a.diff(b);

后者将是我的首选技术。但就我而言,我收到错误“oDate.diff 不是函数”,这是我的代码...

todaysDate = moment(new Date()).format('YYYY, MM, DD');
oDate = moment(result.Order.created).format('YYYY, MM, DD');
var diffDays = oDate.diff(todaysDate, 'days');

我怀疑问题与 oDate 变量的格式有关。但我不知道为什么。

编辑。顺便说一句,我用 console.log 检查了 todaysDate 和 oDate 的值,它们是 今天日期 - 2016 年 9 月 14 日 o日期 - 2016 年 9 月 12 日

有什么建议吗? 干杯

【问题讨论】:

    标签: javascript jquery momentjs


    【解决方案1】:

    取差前不要使用格式化功能。 . .一旦你调用格式,它就不再是时刻对象了。 format 函数将其转换为字符串。

    todaysDate = moment(new Date());
    oDate = moment(result.Order.created);
    var diffDays = oDate.diff(todaysDate, 'days');
    

    【讨论】:

    • 我最初确实尝试过,但是当我查看 Date() 和 result.Order.created 的格式时,它们完全不同。后者采用 mySQL 数据库格式,如“2016-09-12 11:33:40”
    • 好的,这行得通。谢谢。我不知道为什么我第一次尝试它时没有,可能是因为我昨晚凌晨 2 点正在编码。但是谢谢:)
    【解决方案2】:

    你尝试过这样的事情吗?

    var startDate = new Date(2008, 01, 12);
    var endDate = new Date(2008, 01, 22);
    var duration = moment.duration(endDate.diff(startDate));
    var diffDays = duration.asDays();
    

    这里我使用moment.duration()diff() 获取两个日期持续时间之间的间隔,然后asDays() 以天为单位获取结果...

    【讨论】:

    • 好的,我刚刚使用我的数据尝试了这个建议。这是我的代码 var startDate = new Date(result.Order.created); var endDate = new Date();在 console.log 中,两个日期的格式都像这样“2016 年 9 月 14 日星期三 11:45:37 GMT+0100(GMT 夏令时间)”,我得到这个错误:“pos.js:1588 Uncaught TypeError: endDate.diff is不是函数”
    【解决方案3】:

    您可以将日期转换为 unix 时间戳 (moment.unix()),减去两个时间戳并使用 moment.duration() 检查持续时间,这与您的第一次尝试类似

    【讨论】:

      【解决方案4】:

      你可以试试这个:

      function showDays(firstDate,secondDate){
      
      
      
                    var startDay = new Date(firstDate);
                    var endDay = new Date(secondDate);
                    var millisecondsPerDay = 1000 * 60 * 60 * 24;
      
                    var millisBetween = startDay.getTime() - endDay.getTime();
                    var days = millisBetween / millisecondsPerDay;
      
                    // Round down.
                    alert( Math.floor(days));
      
                }
      

      【讨论】:

        猜你喜欢
        • 2015-09-29
        • 1970-01-01
        • 2015-02-26
        • 2019-09-27
        • 1970-01-01
        相关资源
        最近更新 更多