【问题标题】:Foreign Time to Local Time外国时间到当地时间
【发布时间】:2017-05-04 07:09:37
【问题描述】:

我正在尝试将外国时间转换为当地时间。我在Europe/London 中获得了日期和时间。目前我正在使用时刻时区来让我的代码正常工作,但是它给了我一个错误的输出。

resultDate = new moment('2017-06-30T22:10:00').tz('Europe/London').format('YYYY-MM-DD HH:mm:ss');

我认为代码认为日期输入已经是本地时间,我需要将其转换为Europe/London,这将给出本地结果,而我想要的是将外国时间实际转换为本地时间。

简而言之,作为我输入的日期和时间 (2017-06-30T22:00:00),我预计它会提前 7 小时 (2017-07-1T05:00:00),因为我目前住在 Asia/Manila,比伦敦提前 7 小时。但是我得到了2017/06/30 15:00:00 +0100 作为我的结果。

我有没有办法利用我的代码中看到的'Europe/London''Asia/Manila' 信息来做到这一点?

【问题讨论】:

  • 尝试使用 'Z' 后缀以确保您的输入日期时间字符串为 UTC00,例如:resultDate = new moment('2017-06-30T22:10:00Z').tz('Europe /伦敦').format('YYYY-MM-DD HH:mm:ss');
  • @LajosGallay - 我已经尝试按照你提到的那样做。它给了我不同的结果,但仍然是错误的输出。它给了我 2017-06-30 23:00:00
  • @Light 2017-06-30T22:10:00 是伦敦时间、马尼拉时间还是当地时间?你想要的输出是什么?输入转换为伦敦时间、马尼拉时间还是当地时间?
  • @VincenzoC - 2017-06-30T22:10:00 是伦敦时间。我希望将那个时间转换为马尼拉时间。然而,如上所述,代码已将时间视为马尼拉时间,并从中减去 7 小时。如果这令人困惑,我深表歉意。

标签: javascript node.js momentjs


【解决方案1】:

您可以使用moment.tz 将您的输入解析为Europe/London 时间,然后使用tz 函数将其转换为Asia/Manila

第一个使用给定的时区解析您的输入,而后者将时刻对象转换为给定的时区。

这是一个工作示例:

// Parse input considering as London tz
var timeInLondon = moment.tz('2017-06-30T22:10:00', 'Europe/London');
// Converting input to Manila
var timeInManila = timeInLondon.tz('Asia/Manila');
// Show result
console.log(timeInManila.format('YYYY-MM-DD HH:mm:ss'));
<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.11/moment-timezone-with-data-2010-2020.min.js"></script>

【讨论】:

  • 感谢您的回答,但我仍然没有得到正确的结果。这是我得到的输出'2017-06-30 22:10:00'
  • 2017-06-30T22:10:00 是伦敦的时间。我希望将那个时间转换为马尼拉时间。然而,如上所述,代码已将时间视为马尼拉时间,并从中减去 7 小时。如果这令人困惑,我深表歉意。
猜你喜欢
  • 2019-08-25
  • 2015-09-24
  • 2015-11-22
  • 2012-07-26
  • 2021-03-20
  • 2020-04-28
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多