Мгновенный формат времени станет недействительной датой без режима отладки в React Native

#react-native #momentjs

#react-native #momentjs

Вопрос:

версия moment — 2.24.0

Мое значение даты равно 2019-04-23 03:16:00 0000 UTC

Я использую moment, чтобы оно соответствовало азиатскому времени, как:

 const moment = require('moment');

const localTime = moment(date).format('YYYY/MM/DD HH:mm');

<Text>{localTime}</Text>
  

localTime покажет 2019/04/23 11:16

Это работает, когда я тестирую его в режиме отладки.

Но когда я закрою режим отладки localTime , будет

 invalid date
  

Проблема возникает как на Android, так и на IOS.

Есть идеи?

Комментарии:

1. о, я, кажется, пытаюсь поместить его в компонент, а затем создать функцию, например formatDate = date => { const formattedDate = moment(date, 'YYYY-MM-DD hh:mm:ss').format( 'DD MMM YYYY HH:mm', ) return formattedDate }

2. Большое вам спасибо, это работает. Поэтому я должен установить второй параметр формата без режима отладки.

Ответ №1:

Для всех, у кого возникли проблемы с датой / временем в Moment на Android, особенно если вы переходите с React Native 0.59 (или старше) на 0.60 , похоже, что Hermes изменяет способ работы Android с Moment / dates. Однако это сработало бы, если бы отладчик был включен. Оказывается, когда вы запускаете отладчик, он переключается обратно на движок Chromium (или V8?) от Hermes. В результате нам пришлось использовать журналы консоли для отслеживания проблем с моментальным анализом. Как ни странно, проблемы также возникали при попытке тех же манипуляций в Safari.

Если вы анализируете даты, переданные через разные переменные для day, month, year, и у дня или месяца нет предшествующих нулей (например: 01 против 1), я рекомендую сделать это:
const momentFormat = { y: birthYear, m: birthMonth, d: birthDay };
return Moment(momentFormat).format('MMMM Do, YYYY');
Это позволяет вручную устанавливать значения, а не полагаться на то, что каждое значение правильно отформатировано, или писать пользовательский код, чтобы убедиться, что значения дня / месяца имеют значение 0, когда это необходимо.