2016-11-02 19 views
0

ミリ秒単位で日付情報を取得しています。私はそれを正しく解析することができます。しかし、私は自分のPCのタイムゾーンを変更すると、解析時間も変更されます。私は特定のタイムゾーンだけにしたい。javascriptの日付を特定のタイムゾーンに変換する方法

EX。 Tue Apr 26 2016 14:15:00 GMT+0930 (Local Standard Time)

ここで私が唯一の実際の時間が欲しい:PCのタイムゾーンがそれになる変更され

Time in millisec: 1461645900000 
Actual Parsed: 26-Apr-2016 10:15:00 IST 

。それを得る方法? 。しかし、限られた:私は 新しいDate()のtoLocaleString( "EN-US"、{ "" タイムゾーンを})を使用している

function parseDateTime(dt, format) { 
    var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", 
      "Sep", "Oct", "Nov", "Dec" ]; 
    var ret = ""; 
    if (dt) { 
    var day="",month="",year="",hour="",mins="",secs=""; 
     var d = new Date(dt) 
     var os=d.getTimezoneOffset(); 
     if(os<0){ 

     } 
     ret += d.getDate() + "-" + months[parseInt(d.getMonth())] + "-" 
       + d.getFullYear() + " " + leftPad(d.getHours(), 2, "0") + ":" 
       + leftPad(d.getMinutes(), 2, "0") + ":" 
       + leftPad(d.getSeconds(), 2, "0"); 
    } 
    document.getElementById("d1").innerHTML=ret; 
    console.log(ret); 
} 
function leftPad(number, targetLength, withWhat) { 
    var output = number + ''; 
    while (output.length < targetLength) { 
     output = withWhat + output; 
    } 
    return output; 
} 
parseDateTime(1461645900000); 

は、ここで私の小さな試みです。また、私は新しいlibに興味がありません。

+0

あなたはこのライブラリを持っています:http://momentjs.com/ – Skizo

+0

@Skizo:私はlibを使いたくありません。私はロジックの追加のヒントをしたい。 – Joe

+0

JavaScriptの日付はタイムゾーンを持たず、常にUTCです。ホストシステムにはタイムゾーンがあり、Datesは「ローカル」時刻を含む計算にそれを使用します。 – RobG

答えて

2

ミリ秒を過ぎたときにタイムゾーンに関係なく同じ時間を得たいと思っています。代わりに次の2行の

var d = new Date(dt) 
    var os = d.getTimezoneOffset(); 

あなたは、以下の行を含める

var os = new Date() 
    os = os.getTimezoneOffset(); 
    var d = new Date((dt + (os * 60 * 1000))); 

これは、あなたの地域のタイムゾーンに基づいてUTC時刻に、あなたのミリ秒を調整し、調整UTCから日付オブジェクトを作成しますあなたのローカルタイムゾーンに関係なく常に同じ時間になるようにします。

+0

ミリ秒**は** UTCです。あなたがやっていることは、「ローカル」がUTCのように見えるように現地時間帯を補正するために時間値に変更していますが、実際には異なる瞬間を表しています。 – RobG

+0

はい、あなたは正しいです。明らかに別の時間が表示されます。あなたが探しているものを手に入れませんでした。 – Karpak

+0

はい、私はこの方法で試してみました。あなたのansは少しO2をくれました...とにかく、max投票したansはdiffです。私はursを受け入れています。 – Joe

6

の表現が混同されています。回です。唯一の時間は1461645900000です。それは宇宙のどこでも同じです。星が一定の方法で整列され、宇宙がその進歩の特別なポイントにある魔法の瞬間です。

タイムゾーンは、の機能であり、を表します。私が東京に住んでいれば、おそらく私の時代を東京で見たいと思うだろう。私がカリフォルニアに住んでいるなら、おそらくカリフォルニア時間に自分の時間を見ることを好むでしょう。そのような現地時間表現は現地時間とUTCからのオフセットから構成されているため、適切に解釈することができます。

JSで日付を印刷したり出力したりするときに、それは文字列に変換されることはもちろんですが、その文字列は表現であるため、地球上のどこかに相対的でなければなりませんいくつかのオフセットと比較して、デフォルトのJSの振る舞いは、あなたのローカルコンピュータに設定されている現在の場所にオフセットを使用することです。そのため、コンピュータがインドの時間に設定されている場合、「Tue Apr 26 2016 10:15:00 GMT + 0530(インド標準時)」のようなものが表示されます。また、 "2016-04-26T04:45:00.000Z"( "Z"はUTCを意味します)、またはdate.toUTCStringを与えるdate.toISOStringを試すと、ローカルタイムゾーンを無視し、UTCに相対的な時間を与えます。火曜日、2014年4月26日04:45:00 GMT "

ただ、完全を期すために、人々は非常に一般的オフセットタイムゾーンを混乱させる。タイムゾーンは、特定の地域の経時的なすべてのオフセット(DSTの場合など)を完全に記録したものです。実際には、インディアナ州のいくつかの町で1929年にDSTを脱したものを含め、数百の異なるタイムゾーンがあります。タイムゾーンデータを管理する場合は、時間自体とは別にタイムゾーンデータを処理する必要があります。オフセットが発生した場合でも、オフセットからタイムゾーンまで一意に移動する方法はありません。たとえば、カリフォルニアとチリは異なるタイムゾーンですが、両方ともオフセット-08:00です。タイムゾーンを適切に管理するには、特別なタイムゾーンパッケージを使用する必要があります。

「タイムゾーンを変更したい」という人がよく聞きます。時間のタイムゾーンは変更できません。時間自体にタイムゾーンはありません。宇宙時計の時代です。あなたができることは、の表現を特定のオフセットに相対的になるようにの表現に変更することです。たとえば、試したとおりにdate.toLocaleStringを使用できます。あなたはそれについて「限定された」と何を見つけましたか?

> new Date().toLocaleString("en-US", {timeZone: "America/Los_Angeles", timeZoneName: "long"}) 
< "11/3/2016, 8:33:02 AM Pacific Daylight Time" 

timeZoneName: "short"を使用すると、「PDT」が得られます。ただし、これらの3文字の略語は一意ではないため、「PDT」または「PST」または「IST」またはその他の文字をtimeZoneオプションの値として使用することはできません。例えば、「PST」は「ピットケアン標準時」を意味することもあります。

timeZoneをヌル文字列として指定した形式は、動作しません(識別できないタイムゾーンエラーが発生します)。

"IST"などの文字列を指定する場合はどうすればよいですか?上記のように、これは動作しません。 "IST"を "Asia/Kolkata"にマップする方法を見つけなければなりません。これには何らかのライブラリが必要です。何らかのオフセットを指定したい場合はどうすればよいですか?ここでもまた、オフセットからタイムゾーンを推測できるライブラリが必要になります。

最後に、日付を解析したり、これを調整したり、文字列算術を組み込んだりすると、間違っているか不必要なことが起きています。

0

考える:ミリ秒で

時間:14616.459億

あなたが使用して日付を作成する場合:

new Date(1461645900000); 

その後、値は1970年から1901年からのミリ秒単位のオフセットとして扱われます-01T00:00:00Zとなり、ホストシステムの設定にかかわらず同じ時刻を表します。あなたは、文字列としてこれを書くとき:

実際の解析対象:26年04月2016年10時15分00秒IST

は、ホストシステムのタイムゾーンの設定を「ローカル」の日付を作成するために使用されており、 UTC時間値からの時間値。 ISTはUTC + 05です:30ので、同等のUTCの日付は次のとおりです。

2016-04-26T04:45:00Z 

あなたは、その後の進路別の「ローカル」の時間が表示されます、異なるオフセットを持っているものに、あなたのPCのタイムゾーンを変更した場合日付の内部時間値は変更されておらず、それが表す瞬間もありません。したがって、UTC + 09:30のオフセットに変更すると、「ローカル」時間は4時間後になります。

火曜日4月26日2016 14:15:00 GMT + 0930(地方標準時)

あなたが言うときに:

をここで私は、実際の時間が欲しいです。それを得る方法?即ち

26-Apr-2016 10:15:00 IST (UTC+0530) 
Tue Apr 26 2016 14:15:00 GMT+0930 
2016-04-26T04:45:00Z 

時間におけるその瞬間のために、その時間帯に実際の時間である

は、時間的に同じ瞬間のすべての異なる表現です。

特定のタイムゾーンの日付を表す場合は、UTCメソッドを使用してUTC時間を必要なオフセットに調整し、UTCメソッドを使用して表示する日付と時刻の値を取得できます。

関連する問題