Конвертировать формат даты / времени из Etc / GMT в ISO - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужно преобразовать значения даты / времени.

Например, я хочу преобразовать "2019-11-21 09:53:10 Etc/GMT" в значение того же формата, что и "2020-02-13T15:24:47.977Z".

Если вы можете предоставить результирующее эквивалентное значение данного примера, я могу сделать это в качестве ссылки, чтобы уже найти правильный код для преобразования.

Или, если вы можете предоставить точный код javascript для преобразования, это лучше. Я использую «момент» и «момент-часовой пояс».

Ответы [ 4 ]

1 голос
/ 20 февраля 2020

"2019-11-21 09:53:10 Etc / GMT" не является форматом, поддерживаемым ECMA-262, поэтому синтаксический анализ зависит от реализации и на него нельзя положиться, например, в Safari:

new Date("2019-11-21 09:53:10 Etc/GMT");

возвращает недопустимую дату.

Если вы просто хотите преобразовать «2019-11-21 09:53:10 Etc / GMT» в допустимый формат ISO 8601, который также поддерживается ECMA-262, тогда объект Date вообще не нужен, просто немного переформатируйте строку.

let timestamp = '2019-11-21 09:53:10 Etc/GMT'
let iso = timestamp.substr(0, 19).replace(' ','T') + 'Z';

console.log(iso);

// or more tolerant of time part
let timestamp2 = '2019-11-21 09:53:10.123 Etc/GMT'
console.log( timestamp2.replace(' ','T').replace(/ Etc.*$/,'Z') );

// Or
console.log( timestamp2.split(' ').slice(0,2).join('T') + 'Z');

// Or
let [d, t, rest] = timestamp2.split(' ');
console.log(`${d}T${t}Z`);

Существует много способов переформатировать строку без преобразования в дату и обратно в строку. Конечно, если у вас есть строка типа:

'2019-11-21 09:53:10 Etc/GMT-4'

, вам нужно будет вручную проанализировать ее, чтобы получить UT C, поскольку смещения «Etc / GMT» имеют противоположный смысл по отношению к общим смещениям (то есть они + ve запад и -ve восток).

0 голосов
/ 19 февраля 2020

Вам просто нужно передать строку даты в этом формате 2019 11 21 09:53:10 GMT

let date = new Date('2019 11 21 09:53:10 GMT');
console.log(date.toISOString());
0 голосов
/ 20 февраля 2020

Как прокомментировал Nite sh в своем ответе, Etc / GMT совпадает с GMT, когда смещение равно нулю или GMT + 0. Если бы я понял это в начале, я, возможно, не задавал этот вопрос.

Я пробовал следующее, и они приводят к «2019-11-21T09: 53: 10.000Z».

    let date1 = new Date('2019 11 21 09:53:10 GMT+0');
    console.log(date1.toISOString());

    let date2 = new Date('2019 11 21 09:53:10 GMT');
    console.log(date2.toISOString());

    let date3 = new Date('11/21/2019 09:53:10 GMT+0000');
    console.log(date3.toISOString());

    let date4 = new Date('11/21/2019 09:53:10 GMT');
    console.log(date4.toISOString());

Преобразование не будет работать, если я использую исходное значение семпла, которое содержит '-' и 'Etc /' .

Следующее также приведет к "2019-11-21T09 : 53: 10Z "

    let date5 = moment.tz("2019-11-21 09:53:10", "Etc/GMT+0");
    console.log(date5.format());

    let date6 = moment.tz("2019-11-21 09:53:10", "Etc/GMT+0");
    console.log(date6.utc().format());

    let date7 = moment.tz("2019-11-21 09:53:10", "Etc/GMT");
    console.log(date7.format());

    let date8 = moment.tz("2019-11-21 09:53:10", "Etc/GMT");
    console.log(date8.utc().format());

Я не нашел решения, которое не изменило бы исходное значение. Поэтому мне нужно сначала изменить исходное значение перед созданием объекта Date.

    let a = "2019-11-21 09:53:10 Etc/GMT";  // sample value
    let b = a.replace(/-/g, " ").replace("Etc/", ""); // result: "2019 11 21 09:53:10 GMT"
    let c = new Date(b);
    console.log(c.toISOString()); // 2019-11-21T09:53:10.000Z

В качестве альтернативы, без создания нового объекта Date также приемлемо для меня.

    let d = "2019-11-21 09:53:10 Etc/GMT";  // sample value
    let b = d.replace(" Etc/GMT", "Z").replace(" ", "T"); // result: "2019-11-21T09:53:10Z"
    console.log(b); 
0 голосов
/ 19 февраля 2020

Попробуйте это

 var d = new Date(); 
 var n = d.toUTCString();

Вы можете получить ссылку здесь https://www.geeksforgeeks.org/how-to-convert-a-javascript-date-to-utc/

...