Подтвердить что ты не робот

JS Дата: Добавить 0 перед каждым днем ​​или месяцем

У меня эта дата проанализирована из api как строка: DD-MM-YYYY, но иногда дата - DD-M-YYYY или даже D-M-YYYY.

Например:

4-1-2013 или 10-10-2013 или 7-4-2013

Год всегда 4 цифры, но дни или месяцы иногда получают одну цифру. Как я могу вручную (с JS) добавить 0 перед каждой отдельной цифрой?

Я использую moment.js для некоторых вычислений, поэтому я удаляю '-' используя

date.replace("-", "")

чтобы получить целое число (например, 4-1-2013 = 412013), поэтому я могу использовать его с moment.js, но если его одна цифра, все это испортится.

4b9b3361

Ответ 1

Вы можете сначала нормализовать свои строки следующим образом:

date = date.replace(/\b(\d{1})\b/g, '0$1');

который примет любое "слово", которое представляет собой только одну цифру и добавит нуль.

Обратите внимание, что для глобальной замены каждой - вы должны использовать версию regexp .replace - используемая версия строки заменяет первое вхождение, поэтому:

date = date.replace(/\b(\d{1})\b/g, '0$1').replace(/-/g, '');

сделает все, что вам нужно.

Ответ 2

Moment.js поддерживает форматы с тире, поэтому вам даже не нужно выполнять обработку строк.

moment('4-1-2013', 'MM-DD-YYYY').format("MMDDYYYY");   // 04012013
moment('10-10-2013', 'MM-DD-YYYY').format("MMDDYYYY"); // 10102013

Ответ 3

Если переменная date находится в формате String (например, из input[type=date]), вам необходимо разбить компонент данных на отдельные элементы.

date = date.split('-');

затем проверьте как день, так и длину месяца

day = date[0].length==1 ? "0"+date[0] : date[0];
month = date[1].length==1 ? "0"+date[1] : date[1];

затем верните их вместе в желаемый формат

date = ""+day+month+date[2];

Рабочий пример: http://jsfiddle.net/dzXPE/

Ответ 4

var day = new Date();
day = day.getDay();
if(day.toString().length <= 1) {
    day = '0' + day;
}

Вы можете использовать то же самое в течение месяца. Я не совсем уверен, что вам нужно преобразовать в строку, но это не повредит.