2011-07-28 9 views
3

PHPにはdate_default_timezone_setという関数があります。これは、Date()コマンドが使用したGMTに影響します。JSのデフォルトでタイムゾーンを変更

JSにも影響する方法はありますか?

私はこの機能を持っている:

function calcTime(offset) { 
    d = new Date(); 
    utc = d.getTime() + (d.getTimezoneOffset() * 60000); 
    nd = new Date(utc + (3600000*offset)); 
    return nd; 
} 

が(代わりに新しい日に呼ばれるかもしれないが)。彼女との問題は私が新しい日付()を取得したい場合を除いて、良かった。 しかし、パラメータを渡して問題にする場合は... new Date(year、month);

誰かがPHPのようなソリューションを持っているのですか?それは単に新着()に影響します。それ自体を呼び出す関数を変更することなく?

+0

ワース調査:http://phpjs.org/functions/date_default_timezone_set:584 –

答えて

3

これは不幸な質問です。 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をチェックしていないとして、あなたは大丈夫だろう。

関連する問題