我正在尝试执行以下操作
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
编辑:
我根据评论更新了我的代码段。 下面的代码片段有效,但我想知道这个代码段是否有问题。有人可以注意这一点并告诉我一个可能出错的用例吗?
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);
答案 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)"