#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), я рекомендую сделать это:
Это позволяет вручную устанавливать значения, а не полагаться на то, что каждое значение правильно отформатировано, или писать пользовательский код, чтобы убедиться, что значения дня / месяца имеют значение 0, когда это необходимо.
const momentFormat = { y: birthYear, m: birthMonth, d: birthDay };
return Moment(momentFormat).format('MMMM Do, YYYY');