момент js, возвращающий «неверную дату» в 24-часовом формате - PullRequest
0 голосов
/ 03 апреля 2020

Учитывая следующую ситуацию:

let record = "2020-04-01 13:33 PM UTC";
var local_date = moment(new Date(record)).format("MMM Do, YYYY h:mm A");

Выше код возвращает неверную дату.

Но для следующей ситуации:

let record = "2020-04-01 2:33 AM UTC";
var local_date = moment(new Date(record)).format("MMM Do, YYYY h:mm A");

возвращается: 1 апреля, 2020 8:33

Ссылка на песочницу: https://codesandbox.io/s/happy-volhard-m1c7d

Есть предложения по решению этой проблемы?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

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

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

let s = "2020-04-01 13:33 PM UTC";

// Provide the input format when parsing
let d = moment(s, 'YYYY-MM-DD HH:mm A UTC');

// Provide the output format when formatting
console.log(d.format('MMM Do, YYYY h:mm A'));

// If the date is to be treated as UTC, use .utc
console.log(d.utc().format('MMM Do, YYYY h:mm A'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

Кстати, при использовании 24-часового времени использование AM и PM является избыточным (и, возможно, вводящим в заблуждение).

0 голосов
/ 03 апреля 2020

UT C, который вы указываете, неверен. Измените MMM Do, YYYY h:mm A на MMM Do, YYYY hh:mm A или сначала измените время на 12-часовой формат. Формат рассчитан на 01,11,24 и c.

...