Javascript:计算日期时出现问题

时间:2017-11-30 23:12:58

标签: javascript

我正在尝试执行以下操作

a)获取从1970年1月1日到现在为止传递的ms数

b)将a)转换为天数

c)然后将b)添加到01/01/1970

d)我希望d)成为今天

但结果不对。

今天是2017年12月1日 从上面的代码片段我得到2017年11月29日

有人能告诉我我做错了什么以及如何获得正确的价值?

代码段

const a = new Date();
console.log('a ==> '+ a);


const b = a.getTime();
console.log('b ==> '+ b);

const c = b/86400000;
console.log('c ==> '+ c);

const d = Math.floor(c);
console.log('d ==> '+ d);

const e = new Date(1970);
e.setDate(d);
console.log('e ==> '+e);

CONSOLE.LOG

enter image description here

编辑:

我根据评论更新了我的代码段。 下面的代码片段有效,但我想知道这个代码段是否有问题。有人可以注意这一点并告诉我一个可能出错的用例吗?

const a = new Date();
console.log('a ==> '+ a);


const b = a.getTime();
console.log('b ==> '+ b);

const c = b/86400000;
console.log('c ==> '+ c);

const d = Math.round(c)+1;
console.log('d ==> '+ d);

const e = new Date(1970, 0, 1, 0, 0, 0, 0);

console.log('e before setting up ==>'+e);
e.setDate(d);
console.log('e ==> '+e);

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你最好使用Math.floor,只要你考虑到两端的时区偏移。

const a = new Date();
console.log('a ==> '+ a);

const b = a.getTime() + a.getTimezoneOffset();
console.log( 'b ==> '+ b );

const c = Math.floor( b / 86400000 );
console.log( 'c ==> '+ c );

const e = new Date( c * 86400000 - new Date().getTimezoneOffset() );

console.log( 'e ==> '+e );

答案 1 :(得分:0)

您正在使用的Date constructor是添加本地时区偏移量:

  

注意:如果将Date作为具有多个参数的构造函数调用,则   指定的参数代表本地时间。如果需要UTC,
  使用new Date(Date.UTC(...))使用相同的参数。

console.log( d1 = new Date(1970, 0, 1, 0, 0, 0, 0), +d1 ) // "1970-01-01T05:00:00.000Z" 18000000 - time zone offset in milliseconds

console.log( d2 = new Date(0)                     , +d2 ) // "1970-01-01T00:00:00.000Z" 0 - no time zone offset

new Date()new Date(value)以及new Date(dateString)构造函数的某些情况不会。

var date1 = new Date
console.log( date1, date1 + '' )   // "2017-12-02T01:03:19.967Z" "Fri Dec 01 2017 20:13:21 GMT-0500 (Eastern Standard Time)" - local date and time

var days = date1 / 864e5 | 0
console.log( days  )               // 17502

var date2 = new Date( days * 864e5 )
console.log( date2, date2 + '' )   // "2017-12-02T00:00:00.000Z" "Fri Dec 01 2017 19:00:00 GMT-0500 (Eastern Standard Time)"