为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Javascript 中格式化时间戳以显示相关时区的正确时间

如何在 Javascript 中格式化时间戳以显示相关时区的正确时间

一只甜甜圈 2023-05-18 09:57:21
我在 JavaScript 中处理时间有问题。我在 firebase 的文档中有一个时间戳,我有一个应该发送通知的云函数。我想发送带有正确格式的时间戳的通知作为英国当前时区(当前为 BST 或 UTC+1 或 GMT+1)。下面是我的代码......exports.sendNotificationNewRota = functions.firestore  .document('rota/{attendanceId}')  .onCreate(async snapshot => {    const transaction = snapshot.data();    var dateIn = transaction.timeIn.toDate();    let timeIn = dateIn.toLocaleTimeString( {      timezone: 'Europe/London',      timeZoneName: 'long',      hour: '2-digit',      minute:'2-digit'});    console.log(timeIn);此代码的输出为我提供了 UTC 时间。当 BST 完成时这可能没问题,但不是现在。有没有办法正确处理时间?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

天哪,我在这上面浪费了太多时间,但最终我意识到这是我代码中的错字。任何有同样问题的人一定要使用timeZone而不是timezone



查看完整回答
反对 回复 2023-05-18
?
SMILET

TA贡献1796条经验 获得超4个赞

注意函数签名Date.prototype.toLocaleTimeString()


dateObj.toLocaleTimeString([locales[, options]])

详情在这里


您有效地将配置传递给locales参数,为了使代码正常工作,您需要添加一个空的第一个参数。或者,您也可以指定它,'en-UK'例如:


exports.sendNotificationNewRota = functions.firestore

  .document('rota/{attendanceId}')

  .onCreate(async snapshot => {

    const transaction = snapshot.data();


    var dateIn = transaction.timeIn.toDate();


    let timeIn = dateIn.toLocaleTimeString([],{ //<-- fix here

      timezone: 'Europe/London',

      timeZoneName: 'long',

      hour: '2-digit',

      minute:'2-digit'});


    console.log(timeIn);


查看完整回答
反对 回复 2023-05-18
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信