JavaScript中设置小时数的日期为前一天的问题

11

我想使用JavaScript的setHours()方法将时间设置为0,但它会使日期减少一天。以下是示例代码:

var d = new Date();  //2017-09-18T04:58:34.223Z
d.setHours(0,0,0,0);  //2017-09-17T18:30:00.000Z

当我在浏览器控制台中执行上述代码时,它会给我返回这个结果:Mon Sep 18 2017 00:00:00 GMT+0530(印度标准时间)。 - Lalit
1
这是可以预料的,因为日期取决于您的本地时间。该格式是UTC格式,它是基于您的本地时间的当前UTC时间。 - Jalil
我正在Node服务器端使用它,并且得到了完全相同的结果。 - Manoj Sanjeewa
5个回答

9

setHours() 方法根据本地时间设置指定日期的小时,并返回更新后的 Date 实例所表示的时间距 1970 年 1 月 1 日 00:00:00 UTC 的毫秒数。

要将时间设置为协调世界时中的午夜,请使用 setUTCHours()

getUTCHours() 方法根据协调世界时返回指定日期的小时。

var date = new Date();
console.log(date.toISOString());
date.setUTCHours(0,0,0,0);
console.log(date.toISOString());


1

你的代码没有问题。你正在检查的是日期的JSON格式。

var d = new Date();
d.toString();
 //"Mon Sep 18 2017 10:47:15 GMT+0530 (India Standard Time)"
d.toJSON();
//"2017-09-18T05:17:15.839Z"

d.setHours(0,0,0,0);
d.toString();
//"Mon Sep 18 2017 00:00:00 GMT+0530 (India Standard Time)"
d.toJSON();
//"2017-09-17T18:30:00.000Z"

如果您使用getDate方法,您将在设置小时前后得到18。所以代码没有问题。

1
"

d.toLocaleString() 给出本地日期时间

"

var d = new Date();  
d.setHours(0,0,0,0);  

console.log('date', d)

console.log('local date', d.toLocaleString())

console.log(d.toGMTString())

console.log(d.toISOString())


0

我认为没有问题,你可以看到我的代码如下。也许是在中间做错了什么。

或者你对UTC格式感到困惑,那么可以尝试阅读这个https://www.w3.org/TR/NOTE-datetime

var d = new Date();
console.log('d:', d)
var setToZeroTime = new Date(d.setHours(0,0,0,0))
console.log('new date: ',setToZeroTime)


0

我使用 moment 解决了这个问题。

moment().startOf('day');


你是怎么做到的? - RackM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接