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

Javascript date to string

Вот что мне нужно сделать.

Получить дату, преобразовать в строку и передать ее сторонней утилите. Ответ от библиотеки будет иметь дату в строчном формате, когда я его передал. Итак, мне нужно преобразовать дату в строку, например, 20110506105524 (YYYYMMDDHHMMSS)

function printDate() {
    var temp = new Date();
    var dateStr = temp.getFullYear().toString() + 
                  temp.getMonth().toString() + 
                  temp.getDate().toString() +
                  temp.getHours().toString() + 
                  temp.getMinutes().toString() + 
                  temp.getSeconds().toString();

    debug (dateStr );
}

Проблема с вышеизложенным заключается в том, что в течение месяцев 1-9 она печатает одну цифру. Как я могу изменить его, чтобы напечатать ровно 2 цифры за месяц, дату...

4b9b3361

Ответ 1

Вам нужно будет заполнить "0", если его одна цифра и примечание getMonth возвращает 0..11 не 1..12

function printDate() {
    var temp = new Date();
    var dateStr = padStr(temp.getFullYear()) +
                  padStr(1 + temp.getMonth()) +
                  padStr(temp.getDate()) +
                  padStr(temp.getHours()) +
                  padStr(temp.getMinutes()) +
                  padStr(temp.getSeconds());
    debug (dateStr );
}

function padStr(i) {
    return (i < 10) ? "0" + i : "" + i;
}

Ответ 2

Опираясь на JQuery Datepicker, но это можно сделать легко:

var mydate = new Date();
$.datepicker.formatDate('yy-mm-dd', mydate);

Ответ 3

используйте этот polyfill https://github.com/UziTech/js-date-format

var d = new Date("1/1/2014 10:00 am");
d.format("DDDD 'the' DS 'of' MMMM YYYY h:mm TT");
//output: Wednesday the 1st of January 2014 10:00 AM

Ответ 4

Немного проще использовать регулярное выражение и toJSON().

var now = new Date();
var timeRegex = /^.*T(\d{2}):(\d{2}):(\d{2}).*$/
var dateRegex = /^(\d{4})-(\d{2})-(\d{2})T.*$/
var dateData = dateRegex.exec(now.toJSON());
var timeData = timeRegex.exec(now.toJSON());
var myFormat = dateData[1]+dateData[2]+dateData[3]+timeData[1]+timeData[2]+timeData[3]

Что на момент написания дает вам "20151111180924".

Хорошая вещь использования toJSON() заключается в том, что все уже добавлено.

Ответ 5

Может быть, проще преобразовать дату в фактическое целое число 20110506105524, а затем преобразовать в строку:

function printDate() {
    var temp = new Date();
    var dateInt =
        ((((temp.getFullYear() * 100 + 
            temp.getMonth() + 1) * 100 + 
           temp.getDate()) * 100 +
          temp.getHours()) * 100 + 
         temp.getMinutes()) * 100 + 
        temp.getSeconds();

    debug ( '' + dateInt );  // convert to String
}

Когда temp.getFullYear() < 1000 результат будет одним (или более) цифрами короче.

Внимание: это не будет работать с миллисекундной точностью (т.е. 17 цифр), поскольку Number.MAX_SAFE_INTEGER 9007199254740991, который составляет всего 16 цифр.

Ответ 6

Мне нравится Даниэль Серкедо, используя toJSON() и regex. Еще более простая форма:

var now = new Date();
var regex = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).*$/;
var token_array = regex.exec(now.toJSON());
// [ "2017-10-31T02:24:45.868Z", "2017", "10", "31", "02", "24", "45" ]
var myFormat = token_array.slice(1).join('');
// "20171031022445"