Обратите внимание, что ваша входная строка действительна Формат ISO 8601 .
Однако для сериализации JSON в JavaScript используется немного другой (но все еще полностью действующий) стиль формата даты ISO 8601, в котором для дробных секунд используются только 3 цифры (с разрешением в миллисекундах), а часовой пояс настроен на Всемирное координированное время (UTC) , (GMT + 0 или часовой пояс "Зулу"), обозначенное Z
.
// JavaScript
JSON.stringify(new Date()); // => "2018-10-30T15:22:30.293Z"
// Millisecond resolution ─────────────────────────────┺┻┛┃
// "Zulu" (UTC) time zone ────────────────────────────────┚
Вы можете преобразовать свою временную метку в стиль JavaScript, сначала проанализировав входную строку, затем преобразовав время Зулу с помощью UTC()
метода , а затем отформатировав с желаемым выходным форматом.
Например ( Go Playground ):
const (
INPUT_FORMAT = "2006-01-02T15:04:05.999999999-07:00"
OUTPUT_FORMAT = "2006-01-02T15:04:05.000Z"
)
func timestampToJavaScriptISO(s string) (string, error) {
t, err := time.Parse(INPUT_FORMAT, s)
if err != nil {
return "", err
}
return t.UTC().Format(OUTPUT_FORMAT), nil
}
func main() {
s := "2018-10-29T11:48:09.180022-04:00"
s2, err := timestampToJavaScriptISO(s)
if err != nil {
panic(err)
}
fmt.Println(s2)
// 2018-10-29T15:48:09.180Z
}