Javascript: 转换为UTC计算2天的时差
Javascript: Calculate time difference between 2 days with conversion to UTC
我有开始日期和结束日期,我需要将它们转换为 UTC 并计算中间的天数(包括)。
例如:
(01/08/15 10:00 GMT+3) - (04/08/15 10:00 GMT+3) 将 return 4
(01/08/15 00:00 GMT+3) - (04/08/15 10:00 GMT+3) 将 return 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()
returns 有效日期的时间戳。 new Date(timestamp)
将 return 基于时间戳的日期。
要获得日期障碍,您可以进行额外的计算:
(start time + 24 * days + end time) / 24
将这个数字四舍五入,你就得到了日间障碍。
示例:
21 + 24 * 3 + 7 = 100
103 / 24 = 4.1666666.....
Math.floor(4.166666) = 4;
我最终收集了一个非常简单的解决方案,结合了一些 Mouser 的回答(谢谢!)
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;
}
}
我有开始日期和结束日期,我需要将它们转换为 UTC 并计算中间的天数(包括)。
例如:
(01/08/15 10:00 GMT+3) - (04/08/15 10:00 GMT+3) 将 return 4
(01/08/15 00:00 GMT+3) - (04/08/15 10:00 GMT+3) 将 return 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()
returns 有效日期的时间戳。 new Date(timestamp)
将 return 基于时间戳的日期。
要获得日期障碍,您可以进行额外的计算:
(start time + 24 * days + end time) / 24
将这个数字四舍五入,你就得到了日间障碍。
示例:
21 + 24 * 3 + 7 = 100
103 / 24 = 4.1666666.....
Math.floor(4.166666) = 4;
我最终收集了一个非常简单的解决方案,结合了一些 Mouser 的回答(谢谢!)
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;
}
}