Javascript:计算转换为UTC的2天之间的时差

标签 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

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

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;

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

我做错了什么?

最佳答案

function calculate(start, end)
{

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());

return Math.floor(millisecondsToDays = (Date.parse(endDateInUTC) - Date.parse(startDateInUTC)) / 1000 / 3600 / 24);

}
console.log(calculate(new Date("2015/08/01 10:00:00"), new Date("2015/08/04 10:00:00")));
console.log(calculate(new Date("2015/08/01 00:00:00"), new Date("2015/08/04 10:00:00")));

//the answer in both cases will be 3

在这里使用Date.parse。它会将日期转换为 timeStamps。您可以减去这些,然后计算回天数。使用 Math.floor 向下舍入,因为 6.25 是 6 天 6 小时。

timeStamps 是自 1970/01/01 00:00:00 以来经过的毫秒数。该日期始终为 UTC。当您有两个时间戳时,您可以计算它们之间的差异。 Date.parse() 返回有效日期的时间戳。 new Date(timestamp) 将根据时间戳返回日期。

要获得日期障碍,您可以进行额外的计算:

(start time + 24 * days + end time) / 24

将这个数字四舍五入,您就得到了日间障碍。

例子:

21 + 24 * 3 + 7 = 100
103 / 24 = 4.1666666.....

Math.floor(4.166666) = 4;

关于Javascript:计算转换为UTC的2天之间的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812068/

相关文章:

javascript - 多次触发折叠处理程序,用于动态生成的 jQuery Mobile 可折叠列表

javascript - 获取多级下拉菜单的高度

javascript - 在 JavaScript 中将日期转换为 dd/mm/yyyy 格式

java - 使用java获取当前周的剩余日期

javascript - getRange/setValues 并不总是有效

javascript - Service Worker 标记为冗余

java - 不使用 Joda Time 的 Java 时间转换

python - 比较 Python 中的两个 UTC 时间戳

postgresql - Instant 与 ZonedDateTime

r - 将本地日期时间转换为 R 中的 UTC