2017-07-16 100 views
0

我使用的時刻,那一刻,時區,以輸出給定的電視節目的廣播時間日期/時間(任何時區)矩時區不更改日期/時間設置指定的區域

主機時區是美國/芝加哥

在下面的例子中,dateTime通過是一個電視節目,在3小時內播出。這是週日週一在美國/芝加哥9:00 PM,並在4:00 AM在歐洲/薩格勒布:

determineAirTime(dateTime) { 
    console.log(dateTime); // July 16th 2017 9:00PM 

    dateTime = 
momentTimezone.tz(dateTime, "MMM Do YYYY hA", momentTimezone.tz.guess()); 

    dateTime = dateTime.format(); // this creates: 2017-07-16T21:00:00-05:00 

    // moment 
    moment(dateTime).calendar(); // Today at 9:00 PM 
    } 

對於我的時區(美國/芝加哥),Today at 9:00 PM是正確的。但是,它始終爲任何時區輸出Sunday 9:00 pm,這是不正確的。

這是我們在我們的例子中使用的相同數據的例子,但有不同的時區:

enter image description here

以上部分的正確的輸出是Monday at 4:00 AM

如何修復我的程序,以便打印出時區的正確空氣/日期時間?

+0

發佈文本比圖片更好。鑑於薩格勒布是UTC + 01:00,2017-07-23T21:00:00 + 02:00是2017-07-23T20:00:00 + 01:00。你爲什麼認爲時間應該是04:00?美國/芝加哥是UTC-06:00,所以這將是2017-07-23T13:00:00-06:00或1pm。 – RobG

+0

它在薩格勒布的凌晨1點23分,我例子的通話時間是從現在開始的3小時,所以輸出結果應該是星期一凌晨4點。或者接近 – Edon

+0

也許你應該指定一些精確的輸入,輸出和偏移量。你的問題不清楚。 – RobG

回答

1

如果你開始的日期字符串UTC-06:21:00 00 7月23日,那麼你就必須像一個日期:

var s = '2017-07-23T21:00:00-0600'; 

要輸出爲等效的時區的發言權薩格勒布是UTC + 01:00,用途:

var s = '2017-07-23T21:00:00-0600'; 
 
var d = moment(s); 
 

 
console.log('America/Chicago: ' + 
 
      d.tz('America/Chicago').format('dddd D MMMM, YYYY hh:mm a')); 
 

 
console.log('Europe/Zagreb: ' + 
 
      d.tz('Europe/Zagreb').format('dddd D MMMM, YYYY hh:mm a'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data.min.js"></script>

+0

謝謝!我會給這個鏡頭 – Edon

1

觀察:

var dateTime = 'July 16th 2017 9:00PM'; // as you said in your question 

// create a moment object in the original time zone 
var m = moment.tz(dateTime, 'MMM Do YYYY h:mmA', 'America/Chicago'); 

// switch to the target time zone and format back to a string 
var s = m.tz('Europe/Zagreb').format('MMM Do YYYY h:mmA'); // 'Jul 17th 2017 4:00AM' 

此外,在您的代碼中,您使用了moment.tz.guess()。這是不必要的。如果您打算使用本地時區,請撥打local功能。換句話說,將我上面寫的最後一行改爲:

var s = m.local().format('MMM Do YYYY h:mmA');