将新加坡时间转换为UTC时间的时刻代码

moment code to convert Singapore time to UTC time

我编写了以下代码将新加坡时间转换为 UTC 时间。

 function convert(time) {

          let eventStartTime = moment(time, 'HH:mm', 'Singapore').utc().format('HH:mm');

   return eventStartTime;
  }

当我运行下面一行

  convert('19:00');

它给我的输出是 23:00,这是不正确的。我做错了什么?

function convert(time) {
  let eventStartTime = moment(time + ' +0800', 'HH:mm Z',).utc().format('HH:mm');
  return eventStartTime;
}

alert(convert('19:00'))

似乎对我有用

我不认为它是如何解释第三个参数的,所以它只是把它算作我的当地时间,并将我当地时区的晚上 7 点转换为 UTC

我刚刚使用@andré 的 jsfiddle 跟随这个例子:

moment("2010-10-20 4:30 +0000", "YYYY-MM-DD HH:mm Z"); // parsed as 4:30 UTC

来自 https://momentjs.com/docs/#/parsing/parse-zone/

它在文档中说,如果你想使用像 Asia/Singapore 这样的东西,你应该使用这个:https://momentjs.com/timezone/

Alex 的回答正确解释了为什么当前的方法不起作用。但是,我们也可以使用 moment-timezone:

来解决这个问题

function convert(time) {
  let eventStartTime = moment.tz(time, 'HH:mm', 'Asia/Singapore').utc().format('HH:mm');
  return eventStartTime;
}

alert(convert('19:00'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.33/moment-timezone-with-data.js"></script>

虽然这需要您使用 moment.js >= 2.60。