如何使Moment.js忽略用户的时区?

时间:2019-04-24 14:04:18

标签: javascript timezone momentjs

我有一个表格,可以输入在某个特定时间开始的事件。比方说上午9点。

要分配日期/时间对象,我正在使用MomentJs。在不同时区显示时会出现问题。

在伦敦将按预期显示9am-在基辅将显示11am

如何使MomentJS和浏览器忽略与用户相关的时区,而仅显示我给的时间?

这是我的代码:

<p>
Start time:
{moment(event.startDate).format("HH:mm")} 
</p>

3 个答案:

答案 0 :(得分:2)

假设您已将日期存储为utc(在这种情况下可能应该保存),则可以使用以下内容:

@Output
import matplotlib.pyplot as plt
output = [['010', '01', '7'],
['010', '02', '6'],
['010', '03', '24'],
['010', '04', '6'],
['015', '02', '8'],
['015', '03', '27'],
['015', '04', '27'],
['020', '01', '130'],
['020', '02', '140'],
['020', '03', '202'],
['020', '04', '3'],
['021', '01', '3'],
['021', '02', '4'],
['021', '03', '22'],
['021', '04', '1'],
['025', '01', '13'],
['025', '02', '52'],
['025', '03', '82']]


listx = []
listy = []
for i in output:
    listx.append((i[1]))
    listy.append((i[2]))
plt.plot(listx,listy,'ro')
@Output(plt.show())

答案 1 :(得分:1)

让我用Vanilla JavaScript提供替代答案。如果要将时区设置为“中立”,则可以先使用toISOString()将其转换为UTC。

const current = new Date();
const utcCurrent = current.toISOString();

console.log(utcCurrent);

如果要将其转换为特定的时区,例如伦敦,则可以使用toLocaleString()。不过请注意timezone的{​​{3}}。

const londonTime = new Date().toLocaleString('en-US', { timeZone: 'Europe/London' })
console.log(londonTime);

答案 2 :(得分:1)

您想要的是标准化的日期时间。由于时区的概念是一个相当随意的构造,因此可能会造成一些混乱。

我喜欢将Datetime值视为“绝对”和“相对”。无论您处于哪个时区,“绝对”日期时间都是正确的。最常见的示例是UTC(+000)和UNIX时间(也称为Unix纪元,POSIX时间或Unix Timestampe)。

UTC非常明显。当前时间为+000时区。 UNIX时间更有趣。它表示自1970年1月1日以来经过的秒数。

您应该始终将数据存储在客户端和后端中,作为“绝对”时间。我更喜欢UNIX时间,因为它表示为单个整数(nice和clean)。

moment.js为您做到了。实例化moment对象时,可以使用:

var date = moment.utc(utcString)

或Unix时间

var date = moment.unix(unixInt)

然后您可以使用此对象以所需的任何形式显示日期:

console.log(date.tz.("America/Toronto"))