【问题标题】:Angular/Javascript Luxon - Convert timestamp changing time to current user timezoneAngular/Javascript Luxon - 将时间戳更改时间转换为当前用户时区
【发布时间】:2019-11-12 11:10:32
【问题描述】:

我从数据库中得到了一个时间戳,我需要在用户的时区中显示它的时间。

例如: 巴西 16:42,法国 21:42。

这是一个聊天,所以消息需要在每个用户的时区显示。

我在项目中有luxon,但在这种情况下我无法使用任何对我有帮助的文档。

我尝试过以某种方式使用这些方法

DateTime.local() 和 DateTime.setZone(localZone)

localZone 是接收本地区域的变量,例如:“Europe/Paris”。

谢谢!

【问题讨论】:

    标签: javascript angular luxon


    【解决方案1】:

    您可以简单地使用 luxon fromMillis 来解析时间戳(假设它以毫秒为单位)或 fromSeconds 如果它以秒为单位。您还可以通过 zone 选项使用给定的时区创建 luxon 对象。您可以使用toFormat() 以您想要的格式显示时间。您可能会遇到以下情况:

    DateTime.fromMillis(timestamp, {zone: localZone}).toFormat('HH:mm')
    

    如果你需要,你也可以使用setZone来改变区域属性,这里是使用示例数据的sn-p:

    const DateTime = luxon.DateTime;
    let curTimestamp = 1562061791000;
    let time = DateTime.fromMillis(curTimestamp)
    console.log('Local time:', time.toFormat('HH:mm') );
    console.log('Brazil time:',  time.setZone('America/Sao_Paulo').toFormat('HH:mm') );
    console.log('France time:', DateTime.fromMillis(curTimestamp, {zone: 'Europe/Paris'}).toFormat('HH:mm') );
    <script src="https://cdn.jsdelivr.net/npm/luxon@1.16.0/build/global/luxon.js"></script>

    如果您想在 Angular 视图中使用 Luxon,请查看 luxon-angular。

    【讨论】:

    • 您好!我仍然有问题,例如时间表不正确。如果我在巴西的 09:57 发送消息,则使用 DateTime.fromMillis(timestamp).setZone('Europe/Paris').toFormat('HH:mm') 输出是 18:57,但应该是 15:57 , 正确的?发送消息时可能是时间戳创建中的内容吗? luxon 是否有一些最推荐生成此时间戳的方法?感谢您的帮助!
    • @MatheusRufino 今天 09:57 在圣保罗(巴西)是 14:57 在巴黎(见here)。使用 [toMillis()](moment.github.io/luxon/docs/class/src/…) 获取 luxon 对象的纪元毫秒数。我不完全明白您的问题是什么,请尝试提供您尝试的代码示例和您想要的结果,请参阅minimal reproducible example
    • 谢谢!现在它工作了,使用它给我的表格。问题在于生成的时间戳,而不是转换为本地时间。 DateTime.local().toMillis(timestamp) 和使用 DateTime.fromMillis(timestamp).toFormat('HH:mm') 工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2016-03-04
    • 1970-01-01
    • 2018-12-18
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多