Это печальный вопрос. JavaScript не позволяет вам устанавливать часовой пояс по умолчанию. И JavaScript не облегчает подкласс Date. Вы не можете вызвать конструктор Date как функцию, и если вы создадите Date с любым параметром undefined
, вы получите недопустимую дату.
Таким образом, либо вы создаете пользовательскую функцию, как вы, либо создаете пользовательский объект даты и определяете все функции из Date .
В интересах прямой совместимости и простого кода вот решение для пользовательской функции.
(function(){
// Internal timezone settings
var offset_hr = 0;
var offset_ms = 0;
// Get current default timezone in hours
window.getTimezoneOffset = function getTimezoneOffset ( ) { return offset_hr; }
// Set current default timezone in hours
window.setTimezoneOffset = function setTimezoneOffset ( offset ) {
offset_hr = offset * 1 ? offset * 1 : 0;
offset_ms = offset ? offset * 60 * 60 * 1000 : 0;
}
// Create a date with default timezone
window.newDate = function newDate ( year, month, day, hour, min, sec, ms ) {
// Create base date object
var d;
switch ( arguments.length ) {
case 0 : d = new Date( ); break;
case 1 : d = new Date( year ); break;
case 2 : d = new Date( year, month ); break;
case 3 : d = new Date( year, month, day ); break;
case 4 : d = new Date( year, month, day, hour ); break;
case 5 : d = new Date( year, month, day, hour, min ); break;
case 6 : d = new Date( year, month, day, hour, min, sec ); break;
case 7 : d = new Date( year, month, day, hour, min, sec, ms ); break;
}
// Convert to utc time
var offset = d.getTimezoneOffset();
if ( offset || offset_ms ) d.setTime ( d.getTime() + offset * 60 * 1000 + offset_ms );
return d;
}
})();
Пример использования:
setTimezoneOffset( '+2' );
newDate();
newDate('2011-01-24');
newDate(new Date().getTime());
newDate(2011, 12, 31);
newDate(2011, 12, 31, 12, 34, 56, 789);
Пока вы не проверяете getTimezoneOffset новых дат, все будет в порядке.