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 准确计算两个日期之间的天数(包括时间)_Javascript_Date_Datetime - Fatal编程技术网

Javascript 准确计算两个日期之间的天数(包括时间)

Javascript 准确计算两个日期之间的天数(包括时间),javascript,date,datetime,Javascript,Date,Datetime,我正在开发一个前端应用程序,试图计算两个日期之间的天数,我读的关于正确/准确计算两个日期之间天数的方法越多,我就越感到困惑 所以我想,我将在这里发布另一个问题,以最终阐明这一困惑 我还试着在最安全的时候进行计算;是不是当我从下面的后端获取原始UTC日期,并将其转换为区域设置日期和时间之后?我的意思是,获取UTC日期之间的差异还是区域设置日期和时间之间的差异更好 以下是UTC日期: 以下是区域设置日期(在Windows上;在Linux上为diff格式): 所以我的问题是,哪一个能给出准确的日期,U

我正在开发一个前端应用程序,试图计算两个日期之间的天数,我读的关于正确/准确计算两个日期之间天数的方法越多,我就越感到困惑

所以我想,我将在这里发布另一个问题,以最终阐明这一困惑

我还试着在最安全的时候进行计算;是不是当我从下面的后端获取原始UTC日期,并将其转换为区域设置日期和时间之后?我的意思是,获取UTC日期之间的差异还是区域设置日期和时间之间的差异更好

以下是UTC日期: 以下是区域设置日期(在Windows上;在Linux上为diff格式): 所以我的问题是,哪一个能给出准确的日期,UTC还是地区?还有,这是如何计算的,JavaScript函数片段或演示将帮助我和其他人


谢谢

老实说,我会用Moment.js


您可以通过本机进行操作,但这对您来说是可行的,它是轻量级的,它将处理您所有的区域设置问题,而且您可能希望在其他地方进行其他日期操作,您也可以使用它来进行操作

var Date1 = new Date('2014-11-30T15:41:51.012+0000'.substr(0,10)).getTime();
var Date2 = new Date('2014-01-09T02:56:36.000+0000'.substr(0,10)).getTime();
var Diff = Math.floor(Math.max(Date1,Date2)-Math.min(Date1,Date2))/1000/60/60/24;

我真的不明白这个问题,但UTC显然在逗号解析后有3位数字,而第二个“locale”示例只有整数秒的解析。此外,UTC有关于时区的信息。您是否尝试比较结果?你得到了什么?JavaScript以UTC格式存储日期,用户如何查看日期取决于使用的toString方法。可能重复@J Tolley-请提供一个不使用任何库的示例。不,抱歉。我回答的全部要点是,我建议你使用一个图书馆,省得你自己头疼。我相信如果你非常想用本机的方式来做,那么会有另一个答案和示例代码。谢谢你的快速反馈。另外,您的方法有多准确,不确定此函数在后台如何工作,请您解释一下它在后台做什么。UTC或语言环境版本?你能解释一下为什么它会给出一个精确的日期和时间差(以天为单位)?此外,我认为这并不重要,但UTC可能是更好的选择。基本上,您可以将Date1和Date2看作是自1970年1月1日以来的毫秒数。通过从后面的日期中减去初始日期,最终得到两个日期之间的时间差毫秒数。通过将此值转换为天并对其进行计算,最终得到准确的结果。我只是这样做:
console.log('Diff UTC:',Math.floor('2014-11-30T16:27:16.059+0000'-'2014-01-09T02:56:36.000+0000')/1000/60/60/24))
和get
NaN
还有,为什么我们不考虑时间,因为在计算日期差异时,时间会有所不同?我删除了它们,因为我认为您不需要额外的信息。您指定的整个格式与JS不直接兼容,所以我做了一个快速实现。
Locale Date 1:  11/30/2014, 3:41:51 PM
Locale Date 2:  1/9/2014, 2:56:36 AM
var a = moment('2014-11-30T15:41:51.012+0000');
var b = moment('2014-11-30T15:41:51.012+0000');
var dayDiff = a.diff(b, 'days');
var Date1 = new Date('2014-11-30T15:41:51.012+0000'.substr(0,10)).getTime();
var Date2 = new Date('2014-01-09T02:56:36.000+0000'.substr(0,10)).getTime();
var Diff = Math.floor(Math.max(Date1,Date2)-Math.min(Date1,Date2))/1000/60/60/24;