Форматирование строки даты в действии

Я пытаюсь отформатировать строку даты в React Native.

Пример: 2016-01-04 10:34:23

Ниже приведен код, который я использую.

var date = new Date("2016-01-04 10:34:23");
console.log(date);

Моя проблема в том, что когда я подражаю этому на iPhone 6S, он будет печатать Mon Jan 04 2016 10:34:23 GMT+0530 (IST) без каких-либо проблем. Но если я попытаюсь с iPhone 5S, он ничего не печатает. И если вы попытаетесь получить месяц с помощью метода типа date.getMonth(), он напечатает "NaN".

Почему это? Какое обходное решение?

Ответ 1

Прелесть React Native в том, что он поддерживает множество библиотек JS, таких как Moment.js. Использование moment.js было бы лучшим/более простым способом обработки даты/времени вместо кодирования с нуля

просто запустите это в терминале:

npm install moment --save

И на вашей странице React Native js:

import Moment from 'moment';

render(){
    Moment.locale('en');
    var dt = '2016-05-02T00:00:00';
    return(<View> {Moment(dt).format('d MMM')} </View>) //basically you can do all sorts of the formatting and others
}

Вы можете проверить официальные документы moment.js здесь.https://momentjs.com/docs/

Ответ 2

Нет необходимости включать громоздкую библиотеку, такую как Moment.js, чтобы решить такую простую проблему.

Проблема, с которой вы сталкиваетесь, связана не с форматированием, а с разбором.

Как упоминает Джон Шаммас в другом ответе, конструктор DateDate.parse) требовательны к вводу. Ваш 2016-01-04 10:34:23 может работать в одной реализации JavaScript, но не обязательно в другой.

Согласно спецификации ECMAScript 5.1, Date.parse поддерживает (упрощение) ISO 8601. Это хорошая новость, потому что ваша дата уже очень похожа на ISO 8601.

Все, что вам нужно сделать, это немного изменить формат ввода. Поменяйте местами для T: 2016-01-04T10:34:23; и при необходимости добавьте часовой пояс (2016-01-04T10:34:23+01:00), в противном случае предполагается UTC.

Ответ 3

function getParsedDate(date){
  date = String(date).split(' ');
  var days = String(date[0]).split('-');
  var hours = String(date[1]).split(':');
  return [parseInt(days[0]), parseInt(days[1])-1, parseInt(days[2]), parseInt(hours[0]), parseInt(hours[1]), parseInt(hours[2])];
}
var date = new Date(...getParsedDate('2016-01-04 10:34:23'));
console.log(date);

Из-за различий в синтаксическом анализе строк даты рекомендуется всегда вручную анализировать строки, поскольку результаты несовместимы, особенно в разных реализациях ECMAScript, где строки например, "2015-10-12 12:00:00", может обрабатываться как NaN, UTC или локальный часовой пояс.

... как описано в ресурсе:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

Ответ 4

Конструктор Date очень разборчив в отношении того, что он позволяет. Строка, которую вы передаете, должна поддерживаться Date.parse(), и если она не поддерживается, она вернет NaN. Различные версии JavaScript поддерживают разные форматы, если эти форматы отклоняются от официальной документации ISO.

См. примеры здесь для поддержки: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

Ответ 5

Напишите ниже функцию, чтобы получить дату в строке, конвертировать и вернуть в формате строки.

getParsedDate(strDate){
    var strSplitDate = String(strDate).split(' ');
    var date = new Date(strSplitDate[0]);
    // alert(date);
    var dd = date.getDate();
    var mm = date.getMonth() + 1; //January is 0!

    var yyyy = date.getFullYear();
    if (dd < 10) {
        dd = '0' + dd;
    }
    if (mm < 10) {
        mm = '0' + mm;
    }
    date =  dd + "-" + mm + "-" + yyyy;
    return date.toString();
}

Распечатайте его там, где вам нужно: Дата: {this.getParsedDate(stringDate)}