6

JavaScript: Добавление ведущих нулей к дате

49

Я создал скрипт для вычисления даты, которая будет через 10 дней в формате dd/mm/yyyy:

var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();

Мне нужно, чтобы дата отображалась сLeading zeroes для дня и месяца. Я пытался добавить следующие условия в скрипт, но не смог заставить их работать:

if (MyDate.getMonth < 10)getMonth = '0' + getMonth;

и

if (MyDate.getDate < 10)get.Date = '0' + getDate;

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

5 ответ(ов)

16

Попробуйте этот код: http://jsfiddle.net/xA5B7/

var MyDate = new Date();
var MyDateString;

MyDate.setDate(MyDate.getDate() + 20);

MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/'
             + ('0' + (MyDate.getMonth() + 1)).slice(-2) + '/'
             + MyDate.getFullYear();

ИЗМЕНЕНИЕ:

Чтобы пояснить, метод .slice(-2) возвращает последние два символа строки.

Таким образом, мы всегда можем добавить "0" к дню или месяцу и просто запрашивать последние два символа, так как именно они нам и нужны.

Например, если MyDate.getMonth() возвращает 9, это будет:

("0" + "9") // Получаем "09"

Добавление .slice(-2) даст нам последние два символа, что будет:

("0" + "9").slice(-2)
// "09"

Но если MyDate.getMonth() возвращает 10, это будет:

("0" + "10") // Получаем "010"

И добавление .slice(-2) даст нам последние два символа:

("0" + "10").slice(-2)
// "10"
0

Вы можете определить функцию str_pad, аналогичную str_pad в PHP, следующим образом:

function str_pad(n) {
    return String("00" + n).slice(-2);
}

Эта функция принимает число n, преобразует его в строку, добавляя к нему префикс "00", а затем возвращает последние два символа этой строки. Это гарантирует, что результат будет всегда состоять из двух цифр, добавляя нули перед числом, если это необходимо.

0

Я нашел самый короткий способ сделать это:

MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2');

Этот код добавляетLeading нули к всем одиноким, одиночным цифрам.

0

Вопрос: Как можно добавить ноль перед числом в JavaScript, чтобы гарантировать, что длина строки всегда будет равна определенному значению?

Ответ:

Вы можете создать метод для объекта Number, который будет добавлять ноль в начало числа, если его строковое представление короче заданной длины. Вот пример такого метода:

Number.prototype.padZero = function(len) {
    var s = String(this), c = '0';
    len = len || 2; // по умолчанию длина равна 2
    while (s.length < len) s = c + s; // добавляем нули в начале
    return s;
}

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

(function() {
    var myDate = new Date(), myDateString;
    myDate.setDate(myDate.getDate() + 10); // добавляем 10 дней к текущей дате

    myDateString = [
        myDate.getDate().padZero(), // форматируем день
        (myDate.getMonth() + 1).padZero(), // форматируем месяц (месяцы начинаются с 0)
        myDate.getFullYear() // получаем год
    ].join('/'); // объединяем компоненты в строку формата "ДД/ММ/ГГГГ"

    alert(myDateString); // выводим отформатированную дату
})()

/*  Значение: (String)
09/09/2010
*/

Этот код создаёт строку даты в формате "ДД/ММ/ГГГГ", добавляя нули перед числами, если это необходимо.

0

Ваш код создает строку с текущей датой в формате "дд/мм/гггг". Ниже представлен перевод на русский с пояснением.

var MyDate = new Date(); // Создаем новый объект даты с текущими значениями
var MyDateString = ''; // Инициализируем строку для хранения даты
MyDate.setDate(MyDate.getDate()); // Устанавливаем день, используя текущее значение дня

var tempoMonth = (MyDate.getMonth() + 1); // Получаем текущий месяц (0-11, поэтому добавляем 1)
var tempoDate = (MyDate.getDate()); // Получаем текущий день месяца

// Проверяем, если месяц или день меньше 10, добавляем ведущий ноль
if (tempoMonth < 10) tempoMonth = '0' + tempoMonth;
if (tempoDate < 10) tempoDate = '0' + tempoDate;

// Формируем строку с датой в формате "дд/мм/гггг"
MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear();

Таким образом, в результате выполнения этого кода MyDateString будет содержать текущую дату в нужном формате. Если у вас есть дополнительные вопросы, не стесняйтесь задавать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь