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

У меня есть эта дата, проанализированная из api как строка: ДД-ММ-гггг, но иногда дата ДД-м-гггг или даже д-М-гггг.

например:

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

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

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

date.replace("-", "")

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

4 ответов


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

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

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

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

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

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


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

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

если переменная date имеет строковый формат(например, из 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/


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

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