2017-07-25 2 views
-1

時計の時刻を印刷するとき、同様のコードが機能し、選択した時間帯に合わせて調整されますが、これは日付を印刷するためには機能しません。どんな考え?日付がUTCで設定された時間に調整されないのはなぜですか?

ちょうどUTCのデフォルト時間が表示されます。あなたはUTCでの現在の日付と時刻をつかむだろうnow.getUTCDate()now.getUTCHours()と同様のを、使用している

<script> 
    function cetDT(){ 

var now = new Date(); 
var today = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()); 

var day = today.getDate(); 
var month = today.getMonth(); 
var year = today.getFullYear(); 

var anHour = 1000 * 60 * 60; 
today = new Date(today.getTime() - anHour * -2); 

var hours = today.getHours(); 
var minutes = today.getMinutes(); 
var seconds = today.getSeconds(); 

if (hours >= 12){ 
meridiem = ""; 
} 
else { 
meridiem = ""; 
} 


if (minutes<10){ 
minutes = "0" + minutes; 
} 
else { 
minutes = minutes; 
} 

if (seconds<10){ 
seconds = "0" + seconds; 
} 
else { 
seconds = seconds; 
} 

document.getElementById("cetDT").innerHTML = (day + '/' + (parseFloat (month) + 1) + '/' + year); 

} 

cetDT(); 
</script> 
+1

現在の日付と時刻をUTCで取得する 'now.getUTCDate()'と 'now.getUTCHours()'を使用しています。 'getDate'、' getHours'などはタイムゾーンに依存する時間を取得します。 –

+0

しかし、私は "today = new Date(today.getTime() - anHour * -2);"または少なくとも私は試している....任意の提案? – ebkod

+0

このコードには*ロット*のものがあります。あなたは実際に何を達成しようとしていますか? –

答えて

1

相当する地域を取得するには、now.getDate()now.getHours()などが必要です。名前に「UTC」がないことに注意してください。あなたはtoday = new Date(today.getTime() - anHour * -2)today変数を更新をしているにもかかわらず

注、todayは、以前のUTC時間とイニシャルれます。したがって、getTime()はUTCに相対的です。

これを解決するには、あなたがする必要があるすべてはUTCがタイムアウトスワップです:

else { seconds = seconds; }として完全に冗長化されているコードのいくつかのビットは、もありますことを
function cetDT() { 

    var now = new Date(); 
    var today = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds()); 

    var day = today.getDate(); 
    var month = today.getMonth(); 
    var year = today.getFullYear(); 

    var anHour = 1000 * 60 * 60; 
    today = new Date(today.getTime() - anHour * -2); 

    var hours = today.getHours(); 
    var minutes = today.getMinutes(); 
    var seconds = today.getSeconds(); 

    if (hours >= 12) { 
    meridiem = ""; 
    } else { 
    meridiem = ""; 
    } 


    if (minutes < 10) { 
    minutes = "0" + minutes; 
    } else { 
    minutes = minutes; 
    } 

    if (seconds < 10) { 
    seconds = "0" + seconds; 
    } else { 
    seconds = seconds; 
    } 

    document.getElementById("cetDT").innerHTML = (day + '/' + (parseFloat(month) + 1) + '/' + year); 

} 

cetDT(); 

注意。このコードをリファクタリングすることができます)

:)

+0

大きな感謝!それを解決しました。 – ebkod

+0

UTC時刻を交換するとき、私が正しい場合、タイムゾーンを指定する必要がありますか?そのような初心者のように聞こえるのは大変申し訳ありませんが、私はこのコードを勉強しています。タイムゾーンを変更するために何を置き換えるべきか分かりません。 – ebkod

+0

質問と同じくらい悪いことに、ローカル時間ベースの関数ではなく、UTCベースの関数を使用する方が良いことに注意してください。あなたは一貫して使用する必要がありますが、現地時間機能は、有効な夏時間ルールを含め、常に現地時間帯の動作を引き継ぎます。 OPはUTCから固定された時間数だけシフトしたいと考えているので、UTCを基礎として使用する必要があります。 –

関連する問題