Ответ 1
Невозможно убедиться, что toLocaleString
вернется; вы, конечно же, не могли гарантировать, что EDT
будет отображаться на каждой машине, которая запускает его, не говоря уже о любом указании часового пояса.
Из сети разработчиков Mozilla:
Метод
toLocaleString
полагается на базовую операционную систему в датах форматирования. Он преобразует дату в строку, используя соглашение о форматировании операционной системы, в которой запущен script. Например, в Соединенных Штатах месяц появляется до даты (04/15/98), тогда как в Германии дата появляется до месяца (15.04.98). Если операционная система не соответствует требованиям 2000 года и не использует весь год в течение многих лет до 1900 года или более 2000 года, toLocaleString возвращает строку, не совместимую с 2000 годом. toLocaleString ведет себя аналогично toString при преобразовании года, который операционная система не форматирует.
Одним из возможных способов решения проблемы было бы создание пользовательской строки даты с использованием toLocaleDateString
и toLocaleTimeString
.
// Something to this effect:
var d = new Date();
console.log(d.toLocaleDateString() + " " + d.toLocaleTimeString());
Как правило, это не будет включать часовой пояс в его выходе, но даже это не идеально, поскольку вы не можете знать, какой именно формат вывода будет.
Таким образом, лучшим решением было бы использовать пользовательскую функцию форматирования даты:
// Add leading-zeros to numbers less than 10[000...]
function padZ(num, n) {
n = n || 1; // Default assume 10^1
return num < Math.pow(10, n) ? "0" + num : num;
}
function formattedDate(d) {
var day = d.getDate();
var month = d.getMonth() + 1; // Note the `+ 1` -- months start at zero.
var year = d.getFullYear();
var hour = d.getHours();
var min = d.getMinutes();
var sec = d.getSeconds();
return month+"/"+day+"/"+year+" "+hour+":"+padZ(min)+":"+padZ(sec);
}
Для углубленного изучения доступных методов Date
зайдите в MDN Date
.