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

问题描述

我在处理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将要完成但不是现在,这可能很好。有办法正确处理时间吗?

谢谢

解决方法

注意Date.prototype.toLocaleTimeString()的功能签名

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

详细信息为here

您可以有效地将配置传递给locales参数,为了使代码正常工作,您需要添加一个空的first参数。另外,您也可以将其指定为'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);
,

天哪,我在此代码上浪费了很多时间,但最终我意识到这是我代码中的错字。遇到相同问题的人请确保使用timeZone而不是timezone