これは不幸な質問です。 JavaScriptでは、デフォルトのタイムゾーンを設定することはできません。 JavaScriptでは、Dateをサブクラス化することは容易ではありません。 Dateコンストラクタを関数として呼び出すことはできません。また、任意のundefined
パラメータでDateを作成すると、無効な日付が返されます。
したがって、カスタム関数を作成するか、create a custom date object and define all the functions from 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をチェックしていないとして、あなたは大丈夫だろう。
ワース調査:http://phpjs.org/functions/date_default_timezone_set:584 –