JavaScript如何将Europe/Berlin时区转换为本地时区日期

3

我有一个笔记模块,可以显示用户输入的带日期和时间的笔记,使用我的API调用后,我收到了以下日期:

2020-02-08 10:58:00 该日期属于欧洲/柏林时区。

现在客户端想要以本地时区的形式显示它,即在印度应该像这样:

2020-02-08 03:28:00

我知道moment js可以做到,但我不知道如何使用它。 那么有没有办法使用核心JavaScript或momentjs来实现呢?

以下是我尝试使用moment js获取时间字符串的内容:

moment(new Date(targetDateString)).fromNow();

但是它总是显示比本地时区晚五个小时的时间,因为我的本地时区是ITC,日期存储在欧洲/柏林。


请查看 Moment.js 时区:https://momentjs.com/timezone/docs/ - db1975
2个回答

2
你可以使用 moment-timezone

var date = moment.tz("2020-02-08 10:58:00", "Europe/Berlin");
var localDate = moment.tz("2020-02-08 10:58:00", "Europe/Berlin").local();

console.log('Europe/Berlin', date.format());
console.log('Local', localDate.format());
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data-10-year-range.js"></script>


1
当我运行你的示例时,两个日期是相同的。 - Jatin Parmar
我的 Moment.js 版本中没有 tz 函数,它有类似于 zone 的东西,tz 已经被弃用了。 - Jatin Parmar
你需要设置 moment-timezone,这是一个单独的包。 - j-petty
moment-timezone-with-data-10-year-range.js:595 抛出未捕获的 TypeError 错误:无法读取未定义的属性 'apply',需要帮助吗? - Jatin Parmar
moment-timezone-with-data-10-year-range.js:484 Moment Timezone没有2020年02月08日10:58:00的数据。请参阅。 - Jatin Parmar
请您能否提供一个代码示例以帮助重现您的错误。 - j-petty

0

你需要从moment-timezone的网站上安装它(使用“yarn add”或其他方式),并将你的moment替换为moment-timezone中的moment。

像这样:

import moment from 'moment-timezone';

Change timestamp from London To Berlin Time:
moment.tz(someTimeStamp, 'HHmmss','Europe/London').tz('Europe/Berlin').format('HH:mm:ss')

Change timestamp from UTC to browser's local time:
moment.tz(someTimeStamp, 'HHmmss','UTC').local().format('HH:mm:ss')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接