2013-07-19 5 views
15

これは、文字列から日付オブジェクトに変換する必要があるISO日付時刻です。どのように私はそれをローカルのブラウザのタイムゾーンに変換するのをやめさせますか?JavaScriptを停止するタイムゾーンオフセットを変更することからの日付機能

new Date('2013-07-18T17:00:00-05:00') 
Thu Jul 18 2013 18:00:00 GMT-0400 (EDT) 

私はこれが役立つかどう

木2013年7月18日午前17時00分00秒GMT-0500(XX)

+1

ISOフォーマットされた日付のポイントは、タイムゾーンに戻されます。 – SeinopSys

+1

できません。 JavaScript' Date'オブジェクトにはタイムゾーン情報は保存されません。出力/ toStringing/loggingにはローカルブラウザのタイムゾーン(残念ながらデフォルト)またはUTC(明示的なメソッド)を使用します。 – Bergi

+0

しかし、私が表示しようとしているものがブラウザのタイムゾーンにない場合はどうなりますか?なぜcant dateは文字列を解析し、iso文字列で指定されたタイムゾーンオフセットに日付オブジェクトを設定しますか? – user2434674

答えて

0

ワンダー取得したい:あなたの入力して

function goAheadMakeMyDate(s){ 
    var d = new Date(s); 
    // override Date.toString() 
    d.toString = function(){ return ''+s; }; 
    return d; 
} 

var example = goAheadMakeMyDate("Fri 19 July 2013 12:00:00 GMT"); 

example.toString() // returns string actually used to construct the date 
'Fri 19 July 2013 12:00:00 GMT' 

example.toLocaleString() 
'Fri Jul 19 2013 08:00:00 GMT-0400 (EDT)' 

1*example // gives seconds since epoch 
1374235200000 

を:

example = goAheadMakeMyDate('2013-07-18T17:00:00-05:00') 
{ Thu, 18 Jul 2013 22:00:00 GMT toString: [Function] } 
> example.toString() 
'2013-07-18T17:00:00-05:00' 
> example.toLocaleString() // I live in GMT-4 
'Thu Jul 18 2013 18:00:00 GMT-0400 (EDT)' 
> 1*example // convert to integer date 
1374184800000 

ただし、ifこの日付の変更を開始すると、toStringはでなく、に変更されます。

+0

これは私の日付を作りました:-)しかし、(setHourか何かによって)日付オブジェクトが変更されたときには動作しません。 – Bergi

+1

しかし、あなたは5発を発射しましたか?それは6発ですか?実際には、これを正しく実行すると、おそらくすべての日付を複製する必要があります... – Paul

-2

ライブラリを開いている場合は、MomentJS JavaScriptライブラリが時間と日付の処理に人気があります。

+2

リンクを指すのではなく、質問に答えるためにmomentjsをどのように使用できるかを示す必要があります。 – Seph

1

Moment.jsなどのライブラリを使用してこれを行うことができます。

文字列+形式解析を参照してください。

http://momentjs.com/docs/#/parsing/string-format/

以下は、あなたが提供するあなたの日付を解析する必要がありますが、あなたは、あなたのニーズに合わせてそれを変更する必要があるかもしれません。

var dateString = "2013-07-18T17:00:00-05:00"; 

var dateObject = moment(dateString, "YYYY-MM-DDTHH:mm:ssZ").toDate(); 

代わりに、それは時間の秒とタイムゾーンの間のスペースを除いて、あなたが提供する形式であるように見える瞬間の文字列パーサを参照してください。

http://momentjs.com/docs/#/parsing/string/

2

それはJavascriptが動作するための唯一の簡単な方法ですので、あなたには、JavaScriptのこの動作を変更することはできません。何が起こるかは、単にJavascriptがタイムシフトを見て、一致するタイムスタンプを計算してから、ローカルタイムゾーンでこのタイムスタンプの表現をOSに要求します。ここで理解する鍵は、-05:00がタイムゾーンの表示ではなく、単にUTCからのシフトであることです。

タイムゾーンは、単なる政治的意思決定である複雑な獣です。 OSは、ローカルタイムゾーンで時刻を表示するサービスを提供しますが、他のタイムゾーンでは表示しません。これを行うには、DSTのようなものを考慮に入れる必要があります。

いつものように、この問題に取り組むための唯一の方法は、専用のライブラリを使用することです。 Javascriptでは、Moment.jsMoment.Timezone.jsが非常に役に立ちます。例http://codepen.io/Xowap/pen/XKpKZb?editors=0010

document.write(moment('2013-07-18T17:00:00-05:00').tz('America/New_York').format('LLL')); 

はボーナスとして、あなたはMoment.jsから機能を解析/フォーマットのトンを取得します。

ISO 8601を使用している限り、あなたの日付は正確な瞬間に正確に特定でき、好みの任意のタイムゾーンで表示することができます。言い換えれば、あなたの日付を「変換する」JSは重要ではありません。

関連する問題