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,与: 如何计算Date.now()和s之间经过的天数 当然, var s = '2016/04/22'; 不行。我知道如何在许多语言中实现这一点(例如,Python中有许多用于日期时间操作的库),但在JavaScript中,我找不到内置的解决方案。首先将s转换为日期: Date.now() - s; 正如@RobG所建议的,您可以通过设置时间(0,0,0,0)避免时区DST问题: 您也可以选择使用其他舍入,如Math.floor,而不是Math.round,首先将s转换为日期: Date.n

与:

如何计算
Date.now()
s
之间经过的天数

当然,

var s = '2016/04/22';

不行。我知道如何在许多语言中实现这一点(例如,Python中有许多用于日期时间操作的库),但在JavaScript中,我找不到内置的解决方案。

首先将s转换为日期:

Date.now() - s;
正如@RobG所建议的,您可以通过设置时间(0,0,0,0)避免时区
DST
问题:


您也可以选择使用其他舍入,如
Math.floor
,而不是
Math.round
,首先将s转换为日期:

Date.now() - s;
正如@RobG所建议的,您可以通过设置时间(0,0,0,0)避免时区
DST
问题:


您可能还更喜欢使用其他舍入,如
Math.floor
,而不是
Math.round

,正如您所观察到的,JavaScript对日期操作的内置支持非常有限。如果你经常这样做,你可能想考虑库

,正如你观察到的,JavaScript内置的数据处理支持非常有限。如果您经常这样做,您可能需要考虑库

,在这种情况下,您可以使用日期构造函数简单地将字符串转换为<代码>日期>代码>

var s= '2016/04/22';
var ymd=s.split('/');
var dt=new Date(ymd[0],ymd[1]-1,ymd[2]);
var now=new Date();
now.setHours(0,0,0,0);
Math.round((now-dt)/(1000*60*60*24))
如果需要毫秒而不是日期对象,也可以使用
Date.parse

new Date('2016/04/22') // Fri Apr 22 2016 00:00:00 GMT+0200 (CEST)
为了计算天数,首先计算经过的毫秒数,然后将其除以一天中的毫秒数:

Date.parse('2016/04/22') // 1461276000000

在这种情况下,您应该能够使用日期构造函数将字符串转换为日期

var s= '2016/04/22';
var ymd=s.split('/');
var dt=new Date(ymd[0],ymd[1]-1,ymd[2]);
var now=new Date();
now.setHours(0,0,0,0);
Math.round((now-dt)/(1000*60*60*24))
如果需要毫秒而不是日期对象,也可以使用
Date.parse

new Date('2016/04/22') // Fri Apr 22 2016 00:00:00 GMT+0200 (CEST)
为了计算天数,首先计算经过的毫秒数,然后将其除以一天中的毫秒数:

Date.parse('2016/04/22') // 1461276000000
两个小公用事业公司

const MILLISECONDS_IN_DAY = 1000 * 60 * 60 * 24;
const elapsedDays = (Date.now() - Date.parse('2016/04/22')) / MILLISECONDS_IN_DAY;
代码呢

var day = v => Math.floor(v/86400000);
var now = Date.now || (()=>+new Date);
两个小公用事业公司

const MILLISECONDS_IN_DAY = 1000 * 60 * 60 * 24;
const elapsedDays = (Date.now() - Date.parse('2016/04/22')) / MILLISECONDS_IN_DAY;
代码呢

var day = v => Math.floor(v/86400000);
var now = Date.now || (()=>+new Date);

您可以使用日期构造函数(或Date.parse,它们对于解析是等效的),但不推荐使用。考虑到本机解析的不一致性,使用库或简单解析函数手动解析字符串要安全得多。您可以使用日期构造函数(或Date.parse,它们在解析时是等效的),但不建议这样做。考虑到本机解析的不一致性,使用库或简单的解析函数手动解析字符串要安全得多。最好先将“现在”的时间设置为零,因此
(new Date().setHours(0,0,0,0)-dt)
。当然,只有当“经过的”一天是基于日期的,并且2016-04-20T23:59:59到2016-04-21T00:00:01是一天时,这才是正确的+1用于手动解析字符串。最好先将“现在”的时间设置为零,因此
(new Date().setHours(0,0,0,0)-dt)
。当然,只有当“经过的”一天是基于日期的,并且2016-04-20T23:59:59到2016-04-21T00:00:01是一天时,这才是正确的+1用于手动解析字符串。这不是答案,它应该是注释。这不是答案,它应该是注释。鉴于now函数需要支持ECMAScript 2015箭头函数,什么实现将支持该函数,并且没有日期。现在从ECMAScript(ES5)的早期版本开始?当
Math.floor((Date.now-Date.parse('2016/04/22'))/8.64e7)
在3中获得完全相同的结果(注意,强烈不鼓励使用Date.parse)并且不太容易键入时,为什么会有6个函数调用呢,什么样的实现会支持这一点,而不是从以前版本的ECMAScript(ES5)开始的Date.now?当
Math.floor((Date.now-Date.parse('2016/04/22'))/8.64e7)
在3中获得完全相同的结果(注意,强烈反对使用Date.parse)并且不太容易键入时,为什么要有6个函数调用呢。