问题描述
我在处理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