我已经在Firestore中创建了亚洲/加尔各答时区字段。
let start_date = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
start_date = new Date(start_date);
let end_date = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
end_date = new Date(end_date);
start_date.setDate(start_date.getDate() - 1);
start_date.setHours(0, 0, 0, 0);
end_date.setHours(0, 0, 0, 0);
admin.firestore().collection('feed')
.orderBy('created_date')
.where('created_date', '>', start_date)
.where('created_date', '<', end_date)
注意::它正在Firebase功能中运行。
答案 0 :(得分:0)
JavaScript日期和Firestore时间戳记对象没有时区的概念。您在Firebase控制台(或使用console.log()记录值)中看到的只是您的本地时区。 Date对象实际上只是一个数字,而Timestamp只是两个数字,它们代表与unix纪元的偏移量。该偏移量代表的时间点对于世界各地的每个人都是相同的。
因为这些对象中没有编码时区,所以您通过将Date转换为字符串,然后再次转换为Date所做的事情没有做您想的。如果要使用时区对Date对象进行编码,那就可以了。这将帮助Date对象找出确切的时间点。但是该时区信息丢失了。
仅供参考,您无需将日期转换为时间戳即可在查询中使用,只需直接传递Date对象,Firestore SDK就会自动将其转换。