上一个问题打错了请忽略 继续之前的时间问题 let now = new Date(); let today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); let formattedToday = today.toISOString().slice(0, 19).replace('T', ' '); let formattedNow = now.toISOString().slice(0, 19).replace('T', ' ') this.request.watchTimeStart = formattedToday; this.request.watchTimeEnd = formattedNow;当我把toISOString() 改为 toUTCString() 方法时 返回时间从2023-06-08 16:00:00 和 2023-06-09 02:12:30变成了 2023-06-08 00:00:00和 2023-06-09 00:00:00 你的建议为什么让我获得了明显错误的时间,我只是想改时区啊,这时间完全变了
时间: 2024-04-05 20:29:43 浏览: 146
是的,toUTCString() 方法会将 Date 对象转换为 UTC 时间,并返回一个字符串。而UTC时间和本地时间相差的小时数就是你所处的时区。在你将UTC时间字符串放入组件中时,组件会将该字符串解析为本地时间并进行显示。因此,如果你在东八区,组件会将该时间减去 8 小时来显示本地时间。因此,你在使用 toUTCString() 方法时,需要手动将其转换为本地时间,才能得到正确的时间。可以使用 getTimezoneOffset() 方法获取本地时间和UTC时间之间的时差,然后将其转化为毫秒数,最后加到 UTC 时间上,就可以得到本地时间了。
相关问题
我在js中这样写获取的时间是当地时间还是0时区时间 let now = new Date(); let today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); let formattedToday = today.toISOString().slice(0, 19).replace('T', ' '); let formattedNow = now.toISOString().slice(0, 19).replace('T', ' ')
这段代码获取的时间是当地时间,即使用了浏览器所在地的时区。`new Date()`方法返回的是当前的本地时间,而`toISOString()`方法将时间转换成了ISO 8601格式的字符串,其中包含了当前时区的信息。因此,这段代码获取的时间是当地时间,而不是0时区的时间。如果你想要获取0时区的时间,可以使用`Date.UTC()`方法,该方法会返回一个标准的UTC时间,而不是本地时间。例如,可以将以上代码修改为:
```javascript
let now = new Date(Date.UTC());
let today = new Date(Date.UTC());
today.setUTCHours(0);
today.setUTCMinutes(0);
today.setUTCSeconds(0);
let formattedToday = today.toISOString().slice(0, 19).replace('T', ' ');
let formattedNow = now.toISOString().slice(0, 19).replace('T', ' ');
```
这样获取的时间就是0时区的时间了。
好的 用代码帮我表示吧 let now = new Date(); let today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); let formattedToday = today.toUTCString().slice(0, 19).replace('T', ' '); let formattedNow = now.toUTCString().slice(0, 19).replace('T', ' ') this.request.watchTimeStart = formattedToday; this.request.watchTimeEnd = formattedNow;现在代码是这样 我丢失了时分秒的精度 请修复这个Bug让我获取当天0点时间和现在时间
可以使用以下代码来获取当天0点时间和现在时间的 UTC 时间字符串,并保留时分秒的精度:
```
let now = new Date();
let today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
let formattedToday = new Date(today.getTime() - (today.getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace('T', ' ');
let formattedNow = new Date(now.getTime() - (now.getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace('T', ' ');
this.request.watchTimeStart = formattedToday;
this.request.watchTimeEnd = formattedNow;
```
这里使用了 getTimezoneOffset() 方法获取本地时间和 UTC 时间之间的时差,将其转换为毫秒数并从当地时间中减去,得到 UTC 时间。然后使用 toISOString() 方法将其转换为 UTC 时间字符串,并保留时分秒的精度。
阅读全文