簡體   English   中英

Javascript如何將非UTC日期字符串轉換為Date對象?

[英]Javascript How to convert a non-UTC Date string into the Date object?

我有一個字符串“2017-01-05T15:03:25.21”,這已經是我時區的確切時間。 (例如:+8)如何將此字符串轉換為Date對象? 問這個的原因是,Date類似乎只接受'UTC Date String'。 如果我直接這樣做:

var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);

//myDate will have another redundant time-zone offset.

如何正確轉換?

您可以將時區添加到字符串結尾,如下所示:

var strDateTime = "2017-01-05T15:03:25.21"+"-08:00";
var myDate = new Date(strDateTime);

您可以在此處詳細了解有效日期格式:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

https://www.w3.org/TR/NOTE-datetime

如何正確轉換?

與ECMAScript ed 5(ES5)及更高版本一致的實現將使用Date構造函數或Date.parse正確解析字符串,因此:

var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);

將於2017年1月5日3:03:25.21 PM在當地時區生成日期。

但是,鑒於實現之間的解析一般不一致,不建議這樣做。 應該使用自定義函數或庫,例如使用fecha.js

var myDate = fecha.parse(strDateTime, "YYYY-MM-DDTHH:mm:ss.SS")

從ES5及更高版本開始,ISO 8601日期和時間字符串主要按照ISO 8601中的規定進行解析。主要區別在於:

  1. 像“2016-12-12”這樣的僅日期表單被解析為UTC而不是本地
  2. 僅支持“ ISO 8601擴展格式的簡化 ”,詳見ECMA-262§20.3.1.6日期時間字符串格式

所以給出:

var s = "2017-01-05T15:03:25.21";
var d = new Date(s)

然后, d將根據主機系統時區設置轉換為具有UTC時間值的日期。 如果您的主機設置為UTC + 0800,那么這是應用的時區。

日期對象沒有時區。 它們只有一個時間值,表示自1970-01-01T00:00:00Z以來的毫秒數。 任何相關的時區信息都來自主機。 所以評論:

//myDate will have another redundant time-zone offset.

是不正確的。 主機時區設置將用於確定用於計算UTC時間值的偏移量,還用於計算get *方法返回的本地值,如getFullYeargetMonthgetDategetHours等。

偏移量為+0800的系統上的字符串“2017-01-05T15:03:25.21”將生成時間值1483599805210,表示2017-01-05T07:03:25.21Z(即UTC + 0000)。

如果您希望向不同時區的客戶端發送代表特定時刻的時間戳,則應滿足以下條件之一。

將時區附加到字符串:

2017-01-05T15:03:25.21+0800

使用UTC等效項:

2017-01-05T07:03:25.21Z

使用時間值:

1483599805210

最后一個通常是首選的,因為所有實現都支持new Date(timevalue) ,是明確的,並且可以很容易地轉換以便在其他系統中使用。

這應該工作

var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime.replace('T', ' '));

輸出我的時區:2017年1月5日星期五15:03:25 GMT + 0200(EET)

暫無
暫無

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

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