Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何计算从上午12点到上午12点之间的日期差?_Javascript_Date_Datetime - Fatal编程技术网

Javascript 我如何计算从上午12点到上午12点之间的日期差?

Javascript 我如何计算从上午12点到上午12点之间的日期差?,javascript,date,datetime,Javascript,Date,Datetime,我必须计算两个选定日期之间的差异。一天的开始时间为上午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(dif

我必须计算两个选定日期之间的差异。一天的开始时间为上午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天。需要在代码中更改什么才能获得输出 三天?i、 e

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 

任何帮助都将不胜感激。。谢谢

如果一天的开始时间和结束时间都是同一时间,那么最后一天将不被计算在内

你真正想要的是一天的结束时间是第二天的12:00(正如你在问题中所说的)


jsIDLE:

如果一天的开始和结束时间都是相同的时间,那么最后一天将不被计算在内

你真正想要的是一天的结束时间是第二天的12:00(正如你在问题中所说的)


jshiddle:

看起来你想把一天中的任何部分都算作一整天

尝试将第一个日期的时间设置为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}`);

看起来你想把一天中的任何部分都算作一整天

尝试将第一个日期的时间设置为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}`);
如果时间戳和“天”始终为UTC,则可以将时间设置为UTC 00:00:00,获得以天为单位的差值并添加一个。在ECMAScript中,UTC日期总是正好24小时长(它们忽略秒和夏令时)

由于ECMA-262、ISO 8601格式中的一个怪癖,您可以通过简单地使用内置解析器和日期部分有效地将时间设置为00:00:00,因为日期被视为UTC。但是,我建议编写一个简单的解析器(2行或3行),例如

设d0='2019-06-12T10:30:00Z';
设d1='2019-06-14T11:30:00Z';
/*获取两个日期之间的天数差。
**@param{string}ts0-格式为YYYY-MM-DDTHH:MM:ssZ的时间戳
**@param{string}ts1-格式为YYYY-MM-DDTHH:MM:ssZ的时间戳
**@returns以天为单位返回时间戳之间的{number}差,四舍五入
*/
功能差异天数(ts0、ts1){
功能qParse(s){
设b=s.split(/\D/);
返回新日期(Date.UTC(b[0],b[1]-1,b[2]);
}
返回(qParse(ts1)-qParse(ts0))/8.64e7+1;
}
console.log(diffDays(d0,d1))如果时间戳和“天”始终为UTC,则可以将时间设置为00:00:00 UTC,获取以天为单位的差值并添加一个。在ECMAScript中,UTC日期总是正好24小时长(它们忽略秒和夏令时)

由于ECMA-262、ISO 8601格式中的一个怪癖,您可以通过简单地使用内置解析器和日期部分有效地将时间设置为00:00:00,因为日期被视为UTC。但是,我建议编写一个简单的解析器(2行或3行),例如

设d0='2019-06-12T10:30:00Z';
设d1='2019-06-14T11:30:00Z';
/*获取两个日期之间的天数差。
**@param{string}ts0-格式为YYYY-MM-DDTHH:MM:ssZ的时间戳
**@param{string}ts1-格式为YYYY-MM-DDTHH:MM:ssZ的时间戳
**@returns以天为单位返回时间戳之间的{number}差,四舍五入
*/
功能差异天数(ts0、ts1){
功能qParse(s){
设b=s.split(/\D/);
返回新日期(Date.UTC(b[0],b[1]-1,b[2]);
}
返回(qParse(ts1)-qParse(ts0))/8.64e7+1;
}


console.log(diffDays(d0,d1))你不能说一天的开始和结束是同时发生的。如果你宣布一天的开始时间是上午12点,那么结束时间是11:59.999。新日期('2019-06-12T10:30:00Z')和新日期('2019-06-14T10:30:00Z')之间的差异当然是2天。根据我的逻辑,有2天,48小时;-?你是怎么得到3天的?很抱歉重复我的评论:你不能说一天的开始和结束是同时发生的。如果一天的开始时间是上午12点,那么结束时间是晚上11点59分9999分。当然,新日期(“2019-06-12T10:30:00Z”)和新日期(“2019-06-14T10:30:00Z”)之间的差异是2days@Supritha两个不同日期的开始时间(日期1的时间)和结束时间(日期2的时间)应大于48小时,以获得两天之间遇到的总天数。日期1=新日期('2019-06-12T00:00:00Z');日期2=新日期('2019-06-14T10:30:00Z');你不能说一天的开始和结束是同时发生的。如果你宣布一天的开始时间是上午12点,那么结束时间是11:59.999。新日期('2019-06-12T10:30:00Z')和新日期('2019-06-14T10:30:00Z')之间的差异当然是2天。根据我的逻辑,有2天,48小时;-?你是怎么得到3天的?很抱歉重复我的评论:你不能说一天的开始和结束是同时发生的。如果一天的开始时间是上午12点,那么结束时间是晚上11点59分9999分。当然,新日期(“2019-06-12T10:30:00Z”)和新日期(“2019-06-14T10:30:00Z”)之间的差异是2days@Supritha两个不同日期的开始时间(日期1的时间)和结束时间(日期2的时间)应大于48小时,以获得两天之间遇到的总天数。日期1=新日期('2019-06-12T00:00:00Z');日期2=新日期('2019-06-14T10:30:00Z');谢谢解决了我的问题……)这不允许日光节约更改,因为白天可以长于或短于24小时。谢谢!解决了我的问题……)这不允许进行日光节约更改,因为白天可以长于或短于24小时。如果第二个日期的时间为
23:59:01
,则此项不起作用。显然,这是一个非常不可能的情况。只需重新设置秒数。我已经更新了答案。然后是毫秒等。您正在混合UTC和本地时间,因此对于某些日期和时间,这将在不同的时区产生不同的结果。如果第二个日期的时间是
23:59:01
,这将不起作用。显然,这是一种极不可能的情况