我必须计算两个选定日期之间的差额。一天的开始时间是凌晨12点,结束的时间是下一个凌晨12点。
JavaScript代码:
const date1 = new Date('2019-06-12T10:30:00Z');
const date2 = new Date('2019-06-14T10:30:00Z');
const diffTime = Math.abs(date2.getTime() - date1.getTime());
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays);
我得到的差额是2天,这不是我想要的,因为一天是从凌晨12点开始计算的。实际答案应该是3天。需要更改代码中的内容以获得输出 3天?即
1) First Day : 12 June 10:30am - 13 June 12:00am
2) Second Day : 13 June 12:00am - 14 June 12:00am
3) Third Day : 14 June 12:00am - 14 June 10.30am
任何帮助将不胜感激..谢谢!
答案 0 :(得分:1)
您似乎想将一天的任何部分都算作一整天?
尝试将第一个日期的时间设置为00:00:00,将第二个日期的时间设置为23:59:59,这样您的计算就可以了。
const date1 = new Date('2019-06-12T10:30:00Z');
const date2 = new Date('2019-06-14T11:30:00Z');
date1.setSeconds(0);
date1.setMinutes(0);
date1.setHours(0);
date2.setSeconds(59);
date2.setMinutes(59);
date2.setHours(23);
const diffTime = Math.abs(date2.getTime() - date1.getTime());
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
alert(`${diffTime} - ${diffDays}`);
答案 1 :(得分:1)
如果您的时间戳记和“天”始终为UTC,则可以将时间设置为UTC 00:00:00 UTC,以天为单位获取时差并加1。在ECMAScript中,UTC时间始终精确地是24小时(忽略秒和夏令时)。
您只需使用内置解析器和日期部分就可以有效地将时间设置为00:00:00,这是由于ECMA-262的古怪之处,ISO 8601格式的日期被视为UTC。但是,我建议改写一个简单的解析器(2或3行),例如
let d0 = '2019-06-12T10:30:00Z';
let d1 = '2019-06-14T11:30:00Z';
/* Get difference in days between two dates.
** @param {string} ts0 - timestamp in format YYYY-MM-DDTHH:mm:ssZ
** @param {string} ts1 - timestamp in format YYYY-MM-DDTHH:mm:ssZ
** @returns {number} difference between timestamps in days, rounded up
*/
function diffDays(ts0, ts1) {
function qParse(s) {
let b = s.split(/\D/);
return new Date(Date.UTC(b[0], b[1]-1, b[2]));
}
return (qParse(ts1) - qParse(ts0)) / 8.64e7 + 1;
}
console.log(diffDays(d0, d1));
答案 2 :(得分:0)
如果一天开始时间和一天结束时间都相同,那么最后一天将不被计算。
您真正想要的是第二天的结束时间为上午12:00(如您在问题中所述)。
function countDays(dateA, dateB)
{
// Day start time is 12:00am
// 12:00am is represented as 0 hours
dateA.setHours(0);
dateA.setMinutes(0);
dateB.setSeconds(0);
// Day end time is 12:00am on NEXT day
// Adding 1 to the date gives the next day
dateB.setHours(0);
dateA.setMinutes(0);
dateB.setSeconds(0);
dateB.setDate(dateB.getDate() + 1);
// Compute difference
const diffTime = dateB.getTime() - dateA.getTime();
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return diffDays;
}
JSFiddle:https://jsfiddle.net/cefv4jzp/4/