Javascript:通过转换为UTC计算两天之间的时差

Javascript:通过转换为UTC计算两天之间的时差,javascript,date,utc,Javascript,Date,Utc,我有一个开始和结束日期,我需要将它们转换为UTC,并计算其间的天数(包括) 例如: (01/08/15 10:00 GMT+3)-(04/08/15 10:00 GMT+3)将返回4 (01/08/15 00:00 GMT+3)-(04/08/15 10:00 GMT+3)将返回5 以下代码适用于与第一种情况类似的日期,但不适用于第二种情况(转换后还有一天): 我尝试将Math.floor更改为Math.round,但在某些情况下,这只会增加我一天的时间 我做错了什么? 函数计算(开始、结束)

我有一个开始和结束日期,我需要将它们转换为UTC,并计算其间的天数(包括)

例如:

(01/08/15 10:00 GMT+3)-(04/08/15 10:00 GMT+3)将返回4

(01/08/15 00:00 GMT+3)-(04/08/15 10:00 GMT+3)将返回5

以下代码适用于与第一种情况类似的日期,但不适用于第二种情况(转换后还有一天):

我尝试将Math.floor更改为Math.round,但在某些情况下,这只会增加我一天的时间

我做错了什么?

函数计算(开始、结束)
{
var startDateInUTC=新日期(start.getUTCFullYear()、start.getUTCMonth()、start.getUTCDate()、start.getUTCHours()、start.getUTCMinutes()、start.getUTCSeconds());
var endDateInUTC=新日期(end.getUTCFullYear()、end.getUTCMonth()、end.getUTCDate()、end.getUTCHours()、end.getUTCMinutes()、end.getUTCSeconds());
返回Math.floor(毫秒到天数=(Date.parse(endDateInUTC)-Date.parse(startDateInUTC))/1000/3600/24);
}
控制台日志(计算(新日期(“2015/08/01 10:00:00”)、新日期(“2015/08/04 10:00:00”));
控制台日志(计算(新日期(“2015/08/01 00:00:00”)、新日期(“2015/08/04 10:00:00”));

//两种情况下的答案都是3
我最终收集了一个非常简单的解决方案,结合了Mouser的一些答案(谢谢!)


这不值得回答,但使用外部库是一种选择吗?是一个非常强大的库,适用于所有与时间相关的内容-根据我的经验,手动处理时间对象只是一个无底洞。看看
moment.js
不是(01/08/15 00:00 GMT+3)=(31/07/15 21:00 GMT)?因此,返回5的计算似乎是正确的。@Kerem,没有什么区别,两个日期都计算回UTC。所以差别是一样的。嘿,谢谢你的回复。我相信这并不能解决这个问题。时区不明。因此,对于GMT+3,
2015/08/01 01:00-2015/08/01 10:00
应该实际返回2天,而
2015/08/01 03:05-2015/08/01 10:00
仍然返回1您在评论中给出的示例匹配9小时。那不是一天,而是零天零9小时。在UTC,这将是相同的,期望他们之间会有一个日障碍。是否要计算每日障碍?是的,转换为UTC后,我要计算每天的障碍。因此,如果开始时间在星期天,结束时间在星期一,它将被计算为2天,即使它可能不到24小时。谢谢,我相信这解决了它,但我最终以不同的方式解决了它,因为我将在第二分钟发布。
var startDateInUTC = new Date(start.getUTCFullYear(), start.getUTCMonth(), start.getUTCDate(), start.getUTCHours(), start.getUTCMinutes(), start.getUTCSeconds());
var endDateInUTC = new Date(end.getUTCFullYear(), end.getUTCMonth(), end.getUTCDate(), end.getUTCHours(), end.getUTCMinutes(), end.getUTCSeconds());
var totalDays = Math.floor((endDateInUTC - startDateInUTC) / (1000 * 60 * 60 * 24)) + 1;
function calcStreamDaysInUTC(start, end) {
    try {
        // Translate to UTC
        var startDateInUTC = new Date(start.getUTCFullYear(), start.getUTCMonth(), start.getUTCDate(), start.getUTCHours(), start.getUTCMinutes(), start.getUTCSeconds());
        var endDateInUTC = new Date(end.getUTCFullYear(), end.getUTCMonth(), end.getUTCDate(), end.getUTCHours(), end.getUTCMinutes(), end.getUTCSeconds());
        // Reset everything but the date
        startDateInUTC.setHours(0);
        startDateInUTC.setMinutes(0);
        startDateInUTC.setSeconds(0);
        endDateInUTC.setHours(0);
        endDateInUTC.setMinutes(0);
        endDateInUTC.setSeconds(0);

        var totalDays = (endDateInUTC - startDateInUTC) / (1000 * 60 * 60 * 24) + 1;
        return totalDays;
    } catch (e) {
        return -1;
    }
}