从日期到现在之间经过的天数

时间:2016-04-23 21:53:44

标签: javascript date datetime

使用:

var s = '2016/04/22';

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

当然,

Date.now() - s;

没有工作。我知道如何在许多语言中执行此操作(例如,在Python中有许多用于日期时间操作的库),但在JavaScript中,我无法找到内置解决方案。

4 个答案:

答案 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);