我从服务器获取的时间为“ 19:30”,但需要将其转换为“太平洋/复活节时区”。
我尝试过类似的事情
let t = "19:30:00";
let utc = moment.utc(t);
let z = moment(utc).utcOffset(-300).format('HH:mm');
但是我在某个地方出错了。
在我的开发应用程序版本中,我看到它正在转换为14:30,就像-5:00小时一样。
那么,如何获得类似的结果?
这是我尝试过的其他东西
let t = "19:30:00";
let tt = moment.tz(t, "UTC");
let nt = tt.clone().tz("Pacific/Easter");
,我也将nt设为“ 19:30:00”。所以,它根本没有转换
这似乎正在起作用。 却没有显示正确的结果
let t = "19:30:00";
let utc = moment.utc(t, 'HH:mm:ss');
let z = utc.tz('Pacific/Easter').format('HH:mm');
console.log(z);
应将结果显示为19:30 -5小时,应为14:30, 但结果显示为13:30。所以,任何人都知道为什么会这样吗?
答案 0 :(得分:1)
您需要即时时区才能正常工作。
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
答案 1 :(得分:1)
您必须从moment-timezone开始使用tz()
功能。
由于您的输入(19:30:00
并非采用ISO 8601 / RFC 2822认可的格式,因此您必须使用parse并将'HH:mm:ss'
作为第二个参数来moment.utc(String, String)
。
然后,您可以使用tz()
将矩对象转换为给定的时区。
请注意,即使您仅提供时间,也要创建包含日期的矩对象。如文档的Default部分所述:
您可以创建一个矩对象,仅指定某些单位,其余的将默认为当前的日期,月份或年份,或小时,分钟,秒和毫秒的默认值为0。
'Pacific/Easter'
使用Daylight Saving Time(请参阅完整信息here),因此转换取决于日期和夏令时。
如果要使用固定偏移量(无DST),则可以使用utcOffset()
:
通过提供分钟数来设置UTC偏移量。请注意,一旦设置了偏移量,它便会固定不变,并且不会单独更改(即没有DST规则)。
如果输入小于
16
且大于-16
,它将把您的输入解释为小时数。
这里有一个现场样本:
let t = "19:30:00";
let utc = moment.utc(t, 'HH:mm:ss');
let z = utc.tz('Pacific/Easter').format('HH:mm');
console.log(z);
// DST
console.log( moment.utc('2018-09-01 19:30:00').tz('Pacific/Easter').format('HH:mm') );
// No DST
console.log( moment.utc('2018-06-01 19:30:00').tz('Pacific/Easter').format('HH:mm') );
// Fixed offset
console.log( moment.utc('19:30:00', 'HH:mm:ss').utcOffset(-5).format('HH:mm') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.17/moment-timezone-with-data-2012-2022.min.js"></script>