moment js не может изменить строку даты в новый формат

#javascript #mysql #momentjs

#javascript #mysql #momentjs

Вопрос:

У меня есть следующий HTML:

 <strong id="ut-open-date">27/06/2014</strong>
  

и я хочу прочитать текст / innerhtml и преобразовать его формат в «ГГГГ-ММ-ДД», чтобы я мог вставить его в таблицу MySQL. Я использую moment.js библиотеку, и мой код приведен ниже:

 var CreateDate = moment(jQuery('#ut-open-date').html()).format("DD/MM/YYYY");
CreateDate = moment(CreateDate).format("YYYY-MM-DD");
  

Но код меняется 27/06/2014 на 2016-06-03 , и я не могу понять, почему.

Я также пробовал этот код с тем же результатом.

 var CreateDate = moment(jQuery('#ut-open-date').html()).format("YYYY-MM-DD");
  

Приветствуется любая помощь.

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

1. Какую версию momentjs вы используете?

2. Привет @Rahil Wazir, я использую 2.5.1. Я решил это с помощью split. Смотрите мой ответ ниже. Спасибо

Ответ №1:

Если мы разберем ваш код шаг за шагом, вы сможете увидеть, где что-то идет не так:

 var CreateDate = moment(jQuery('#ut-open-date').html())
  

В этой части используется конструктор по умолчанию, чтобы попытаться проанализировать дату, это в лучшем случае ненадежно и устарело. Итак, moment пытается угадать, какой здесь формат даты.

 .format("DD/MM/YYYY");
  

Это берет то, что когда-либо было прочитано на шаге 1, и пытается превратить это в строку в формате ДД / ММ / ГГГГ

 CreateDate = moment(CreateDate)
  

Теперь вы снова выполняете синтаксический анализ без указания формата, поэтому moment делает это лучше всего угадать

 .format("YYYY-MM-DD");
  

Теперь вы сказали ему преобразовать любую предполагаемую дату в строку с форматом ГГГГ-ММ-ДД

Сделайте это вместо:

 var CreateDate = moment(jQuery('#ut-open-date').html(), 'DD/MM/YYYY').format('YYYY-MM-DD');
  

moment(dateString) Форма устарела, вместо нее следует использовать форму moment(dateString, expectedFormat).

Смотрите документацию moment здесь:http://momentjs.com/docs/#/parsing/string-format /

Спасибо athms за ссылку

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

1. Укажите на @JackAllan или переменную CreateDate = moment(jQuery(‘#ut-open-date’).html(), ‘ДД / ММ/ГГГГ’).format(‘ГГГГ-ММ-ДД’); для целей примера. Смотрите momentjs.com/docs/#/parsing/string-format

Ответ №2:

Проблема в том, что вам нужно указать, moment.js какой формат для строки даты вы хотите проанализировать, указав второй параметр. Посмотрите все поддерживаемые форматы. Если вашего формата нет в списке (смотрите Открытую проблему для строк, отличных от ISO), вам необходимо указать параметр формата даты.

 moment( jQuery('#ut-open-date').html(), "DD/MM/YYYY" )
  

ДЕМОНСТРАЦИЯ

Ответ №3:

Я решил это, используя split следующим образом:

 var CreateDate = jQuery('#ut-open-date').text();
var DateArray = CreateDate.split('/');
CreateDate = DateArray[2]   '-'   DateArray[1]   '-'   DateArray[0];
  

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

1. Кстати, это неправильный способ. Смотрите два ответа ниже, какой из них лучше всего подходит для вас.