Ответ 1
Объекты Date в ECMAScript являются внутренними UTC. Смещение временного интервала используется для локальных времен.
Спецификация Date.prototype.toJSON говорит, что использует Date.prototype.toISOString, которая заявляет, что "часовой пояс всегда UTC". То, что делает ваше решение, - это смещение значения времени UTC объекта даты по смещению часового пояса.
Рассмотрим добавление собственного метода в Date.prototype, например.
Date.prototype.toJSONLocal = function() {
function addZ(n) {
return (n<10? '0' : '') + n;
}
return this.getFullYear() + '-' +
addZ(this.getMonth() + 1) + '-' +
addZ(this.getDate());
}
Изменить
Если вы хотите сжать дополнительную производительность, следующее должно быть быстрее:
Date.prototype.toJSONLocal = (function() {
function addZ(n) {
return (n<10? '0' : '') + n;
}
return function() {
return this.getFullYear() + '-' +
addZ(this.getMonth() + 1) + '-' +
addZ(this.getDate());
};
}())
Но это отвлекает преждевременную оптимизацию, поэтому, если вы не вызываете ее тысячи раз за очень короткий период, я бы не стал беспокоиться.