JavaScript переменная даты возвращает неправильные даты для ввода строки - PullRequest
0 голосов
/ 03 марта 2020

Я получаю строку, содержащую дату и время от веб-службы, отформатированную как dd/MMM/yyyy hh:mm:ss, невозможно изменить выходные данные веб-службы в соответствии с требованиями JavaScript приложения.

Ради Для простоты я заменяю данные веб-службы на жестко закодированные строки, значения которых указаны ниже.

// The raw input from the web service
var dateOne = new Date("04/Mar/2020 08:00:00");// Invalid Date {}

// After .replace to make it valid
var dateTwo = new Date("04-Mar-2020 08:00:00");// Sat Mar 04 2000 10:00:00

dateOne недопустим (раньше действовал, но в последнее время это оказалось трудным)

dateTwo is допустимо, но неверно (изменение времени с 8 на 10 является правильным в зависимости от часового пояса, но мой часовой пояс не 20 лет назад)

Если бы кто-то мог указать мне правильное направление, это было бы очень полезно. Заранее спасибо.

1 Ответ

2 голосов
/ 03 марта 2020

К сожалению, инициализация даты из строки даты, то, как вы это делаете, настоятельно не рекомендуется

Примечание: парсинг строк даты с конструктором Date (и Date.parse (), который работает одинаково) настоятельно не рекомендуется из-за различий и несоответствий в браузере.

  • Поддержка строк формата RF C 2822 предоставляется только по соглашению .
  • Поддержка форматов ISO 8601 отличается тем, что строки только с датой (например, «1970-01-01») обрабатываются как UT C, а не как локальные.

Однако вы можете явно проанализировать строку даты, используя момент JS

const dateString = '04/Mar/2020 08:00:00';
const date = moment(dateString, 'DD/MMM/YYYY HH:mm:ss');
console.log(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...