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个函数调用呢。