簡體   English   中英

為什么JavaScript會使我的約會增加5個小時?

[英]Why does JavaScript add 5 hours to my date?

我有一個datetime字符串,想創建一個JS Date對象:

var dt_string = "2/10/2018 11:52:41 PM";
var d_object = new Date(dt_string);

我想以其他格式打印日期/時間(恰好與ISO字符串匹配):

console.log("date/time: " + d_object.toISOString().substring(0,10) + " " + d_object.toISOString().substring(11,19));

我希望看到:

"2018-02-10 23:52:41"

相反,我得到這個:

"2018-02-11 04:52:41"

比原計划晚了5個小時。 調試后,我發現:

new Date(d_string): Sat Feb 10 2018 23:52:41 GMT-0500 (Eastern Standard Time)

這讓我覺得與格林尼治標准時間相比,我的時間增加了5個小時。 如何讓JS尊重我的原始時間,而不更改它?

首先,您應該簡化生活,並安裝moment-timezone

但是,正如評論所建議的那樣, toISOString使用UTC格式。

如果您真的很想在您的時區進行打印, 請查看此StackOverflow問題

這是對這些答案之一的操作,以打印您想要的內容。 絕對不是理想的方法。

 var dt_string = "2/10/2018 11:52:41 PM"; var d_object = new Date(dt_string); console.log(d_object); d_object.setTime(d_object.getTime() - d_object.getTimezoneOffset() * 60 * 1000); console.log(d_object); 

假定每個Date對象的時區都是本地計算機的時區:在您的情況下為UTC-05

由於toISOString()返回的UTC偏移日期為零 (以字符串形式),因此您需要增加5個小時

請注意, Date對象在內部不存儲任何時區信息。

為了回答您的問題:

如何讓JS尊重我的原始時間,而不更改它?

如果您的“原始時間”是UTC偏移量為零,則可以在傳遞給Date構造函數的字符串中指定該Date

var dt_string = "2/10/2018 11:52:41 PM UTC+0000";
//                                     ^^^^^^^^
var d_object = new Date(dt_string);

現在,如果您評估:

console.log("date/time: " + d_object.toISOString().substring(0,10) + " " + d_object.toISOString().substring(11,19));

你得到:

"date/time: 2018-02-10 23:52:41"

請注意,如果您檢查d_object ,則根據先前編寫的d_object ,將解析日期轉換為本地時區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM