两个日期之间的日差异不正确

时间:2015-01-29 15:55:05

标签: javascript datetime

我有以下代码,现在计算正确的分钟数,但天数没有正确计算。此外,所需的帮助添加了仅计算mon-fri并排除sat / sun的代码。

日期格式我使用减法(DDMMYYY):01/01/2015 20:21 - 01/01/2015 20:22。这将使用以下代码返回4.1。 “。1”是正确的,一分钟差异。 4是不正确的,因为它不超过一天。

注意 - 我搜索了其他线程但无法找到解决方案。 我的代码如下:

function stringToDate(s) {
    var dateParts = s.split(' ')[0].split('/'); 
    var timeParts = s.split(' ')[1].split(':');
    var d = new Date(dateParts[0], --dateParts[1], dateParts[2]);
    d.setHours(timeParts[0], timeParts[1]);
    return d; 
}

function test() {
    var a = slat_1.value;
    var b = slar_1.value;
    var x = (new Date(stringToDate(a) - stringToDate(b)));

    //converting milliseconds
    x = 1000*Math.round(x/1000); // round to nearest second
    var d = new Date(x);
    alert( d.getUTCDay() + '.' + d.getUTCMinutes() );
}

3 个答案:

答案 0 :(得分:2)

如果您输入格式" 01/01/2015 20:21"

,那么您对日期的订单是错误的
var d = new Date(dateParts[0], --dateParts[1], dateParts[2]);

应为Year, Month, Date

var d = new Date(dateParts[2], --dateParts[0], dateParts[1]);

下一步

var x = (new Date(stringToDate(a) - stringToDate(b)));

你正在减去两个字符串的新日期......没有任何意义。

用基本数学计算差异



function stringToDate(s) {
    var dateParts = s.split(' ')[0].split('/'); 
    var timeParts = s.split(' ')[1].split(':');
    var d = new Date(dateParts[2], --dateParts[0], dateParts[1]);
    d.setHours(timeParts[0], timeParts[1]);
    console.log(d)
    return d; 
}

(function test() {
    var a = "01/02/2015 20:21";
    var b = "01/02/2015 20:22";
    var delta  = (stringToDate(b) - stringToDate(a))/1000;

    var days = Math.floor(delta / 86400);
    delta -= days * 86400;
    console.log(delta);
    var minutes = Math.floor(delta / 60) % 60;
    alert(days + "." + minutes)
}());




答案 1 :(得分:1)

所有问题的答案(至少在这种情况下)是使用momentjs及其日期计算功能。

moment.js

答案 2 :(得分:-1)

使用Moment JS可以让您的生活更轻松。在代码中使用日期,时间和年份很难进行数学计算。有些月份比其他月份有更多的日子。 (你好闰年)

我创建了一个按时工作的解决方案,我注意到了几个问题。

你不能以你的方式减去完整日期,因为当你从一个飞蛾移动到另一个飞蛾时,你将从较大的一个中减去一个较小的数字。所以你最终得到一个负数。同样的事情发生在今年年底。

你可能想要控制一些变量的日志,以确保你得到你期望的结果。

这只是基于我所看到的。