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 цифры за месяц, дату...
Ответы
Ответ 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"