Преобразовать строку в дату без учета часового пояса - Typescript - PullRequest
0 голосов
/ 10 октября 2018

Я получаю дату в виде строки в следующем формате (например):

"11/10/2015 10:00:00"

Это время UTC.

Когда я создаю дату из этой строки,он рассматривает его как местное время:

let time = "11/10/2015 10:00:00";
let date = new Date(time); 
console.log(date);

печатает:

"Tue Nov 10 2015 10:00:00 GMT+0200"

(вместо того, чтобы рассматривать его как UTC: «Вт 10 ноября 2015 10:00:00»)

Я также пытался использовать для этого моментальный файл.

Есть ли хороший способ заставить Date () считать строку UTC без добавления "Z" / "UTC" / "+ 000" вконец строки?

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Вы можете использовать встроенную функцию Date.UTC(), чтобы сделать это.Вот небольшая функция, которая возьмет формат, который вы указали в исходном сообщении, и преобразует его в строку даты UTC

let time = "11/10/2015 10:00:00";

function getUTCDate(dateString) {
  // dateString format will be "MM/DD/YYYY HH:mm:ss"
  var [date, time] = dateString.split(" ");
  var [month, day, year] = date.split("/");
  var [hours, minutes, seconds] = time.split(":");
  // month is 0 indexed in Date operations, subtract 1 when converting string to Date object
  return new Date(Date.UTC(year, month - 1, day, hours, minutes, seconds)).toUTCString();
}

console.log(getUTCDate(time));
0 голосов
/ 10 октября 2018

Ваша дата анализируется конструктором даты в формате ММ / ДД / ГГГГ с применением локального смещения часового пояса (поэтому выходные данные представляют локальную полночь в начале рассматриваемого дня).Если ваша дата действительно ММ / ДД / ГГГГ, все, что вам нужно сделать, это вычесть смещение часового пояса, и вы получите дату UTC ...

var myDate = new Date("11/10/2015 10:00:00");
myDate = new Date( myDate.getTime() - (myDate.getTimezoneOffset()*60*1000));
console.log(myDate.toLocaleString([],{timeZone:'UTC'}))

Вот все, что я знаю об управлении часовым поясом при сериализации и десериализации дат.Все часовые пояса статичны!У дат JS нет собственного часового пояса.

0 голосов
/ 10 октября 2018

Вы можете использовать Date.UTC для этого, но вам придется проанализировать вашу строку и поместить каждую ее часть в качестве аргументов самостоятельно, так как она не может проанализировать такую ​​строку.Также вы можете использовать moment.js для его анализа: Преобразование даты в другой часовой пояс в JavaScript

Кроме того, похоже, что new Date("11/10/2015 10:00:00 GMT") анализирует дату как GMT и толькопосле этого преобразует его в ПК по местному времени

...