【发布时间】:2020-03-12 16:33:22
【问题描述】:
我正在尝试为我的项目创建折线图。为此,我需要来自用户的两个date 输入。从那里我的后端将输入转换为 javascript 日期对象。
我的问题是当我尝试将日期对象转换为 Firestore 时间戳时出现此错误。
TypeError: t.getTime 不是函数 在 Function.ho.fromDate (timestamp.ts:27) 在 Object.next (generateReportDateRange.php:158) 在 subscribe.ts:104 在 subscribe.ts:233
(generateReportDateRange.php:158) 行指向此代码:
var toTimeStampOne = firebase.firestore.Timestamp.fromDate(dateIdOne);
该代码所做的是将日期对象转换为 Firestore 时间戳对象。从那里我应该使用toTimeStampOne 作为查询从documents 获取某些数据
这里是可能与问题有关的后端代码:
var dateIdOne = sessionStorage.getItem("dateOne");
var dateIdTwo = sessionStorage.getItem("dateTwo");
var dateSetArray = [];
var dataCal = [];
console.log(dateIdOne); //OUTPUT: Fri Mar 06 2020 08:00:00 GMT+0800 (Philippine Standard Time)
console.log(dateIdTwo); //OUTPUT: Tue Mar 10 2020 08:00:00 GMT+0800 (Philippine Standard Time)
firebase.auth().onAuthStateChanged(user => {
if (user) {
this.userId = user.uid;
} //stores the user id in variable
var toTimeStampOne = firebase.firestore.Timestamp.fromDate(dateIdOne);
var toTimeStampTwo = firebase.firestore.Timestamp.fromDate(dateIdTwo);
var dateSetArray = [];
var dataCal = [];
let userRef1 = firebase.firestore().collection("users").doc(userId).collection("glucose")
.where("dateAdded", ">=", toTimeStampOne)
.where("dateAdded", "<=", toTimeStampTwo)
.limit(7);
return userRef1.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
this.dateSet = doc.data().bgReading;
dateSetArray.push(dateSet);
this.calDateAdded = doc.data().dateAdded.toDate();
const options = {
month: 'short',
day: 'numeric',
year: 'numeric'
};
const date = new Date(calDateAdded);
const americanDate = new Intl.DateTimeFormat('en-us', options).format(date);
dataCal.push(americanDate);
});
});
});
编辑
这是转换的过程
//get date input from the forms and converts it to a js date object already
var data = {
dateOne: new Date($('#dateRangeOne').val()),
dateTwo: new Date($('#dateRangeTwo').val()),
};
//stores the date object to a session storage
sessionStorage.setItem("dateOne", data.dateOne);
sessionStorage.setItem("dateTwo", data.dateTwo);
【问题讨论】:
-
我们需要能够看到
sessionStorage.getItem("dateOne")究竟返回了什么。它甚至是 JavaScript Date 对象(而不是字符串)吗?听起来好像不是。尝试在其上调用其他 Date 方法。 -
@DougStevenson
console.log(dateIdOne); //OUTPUT: Fri Mar 06 2020 08:00:00 GMT+0800 (Philippine Standard Time) -
是的,这是一个日期对象,还是只是一个字符串?尝试在其上调用日期方法。
-
store a field as a timestamp in Firestore, you'll have to send a JavaScript Date object or a Firestore Timestamp object -
试试
firebase.firestore.Timestamp.fromDate(new Date(dateIdOne));
标签: javascript firebase google-cloud-firestore