我正在使用时刻和时刻来输出给定电视节目的播出时间/时间(适用于任何时区)
主持人时区是America / Chicago
在下面的示例中,传入的dateTime
是一个播出时间为3小时的电视节目。周日晚上9点在美国/芝加哥,周一凌晨4点在欧洲/萨格勒布:
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
,这是不正确的。
以下是我们在示例中使用的相同数据的示例,但具有不同的时区:
上述的正确输出为Monday at 4:00 AM
。
如何修复程序,以便打印出时区的正确播出时间?
答案 0 :(得分:1)
如果您在7月23日21:00开始使用UTC-06:00的日期字符串,那么您将拥有如下日期:
var s = '2017-07-23T21:00:00-0600';
要输出相当于时区的Zagreb,即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>
&#13;
答案 1 :(得分: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');