使用:
var s = '2016/04/22';
如何计算Date.now()
和s
之间经过的天数?
当然,
Date.now() - s;
没有工作。我知道如何在许多语言中执行此操作(例如,在Python中有许多用于日期时间操作的库),但在JavaScript中,我无法找到内置解决方案。
答案 0 :(得分:2)
首先将s转换为日期:
var s= '2016/04/22';
var ymd=s.split('/')
var dt=new Date(ymd[0],ymd[1]-1,ymd[2])
Math.round((Date.now().setHours(0,0,0,0)-dt)/(1000*60*60*24))
根据@RobG的建议,您可以避免DST
的时区setHours(0,0,0,0)
问题:
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))
您也可以优先使用Math.floor
代替Math.round
而不是Statuses
答案 1 :(得分:2)
在这种情况下,您应该能够使用Date构造函数将字符串转换为Date
。
new Date('2016/04/22') // Fri Apr 22 2016 00:00:00 GMT+0200 (CEST)
如果您需要毫秒而不是日期对象,也可以使用Date.parse
:
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;
答案 2 :(得分:1)
正如您所观察到的,JavaScript内置的日期操作支持非常受限。如果您经常这样做,您可能需要考虑moment.js库
答案 3 :(得分:1)
两个小实用程序
var day = v => Math.floor(v/86400000);
var now = Date.now || (()=>+new Date);
和代码
var time = Date.parse('2016/04/22');
day(now()) - day(time);