将日期转换为时间戳,以便在javascript中存储到firebase firestore中
我目前正在使用将日期转换为时间戳,以便在javascript中存储到firebase firestore中,javascript,firebase,date,timestamp,google-cloud-firestore,Javascript,Firebase,Date,Timestamp,Google Cloud Firestore,我目前正在使用Math.floor(Date.now()/1000)获取正确的时间戳格式,以便添加到Firebase中的文档中,但是,时间戳是作为数字插入的,而不是作为时间戳插入的 我想按如下所示插入它(作为时间戳,而不是数字) 这可能吗?要在Firestore中存储日期/时间戳,您需要发送一个date对象 例如,对于现有日期,将字段设置为:newdate(“1815年12月10日”) 更多信息可用。正如我看到的,您正在执行添加日期,最好使用服务器时间戳并使用以下安全规则来强制执行 安全规则
Math.floor(Date.now()/1000)
获取正确的时间戳格式,以便添加到Firebase中的文档中,但是,时间戳是作为数字插入的,而不是作为时间戳插入的
我想按如下所示插入它(作为时间戳,而不是数字)
这可能吗?要在Firestore中存储日期/时间戳,您需要发送一个
date
对象
例如,对于现有日期,将字段设置为:newdate(“1815年12月10日”)
更多信息可用。正如我看到的,您正在执行添加日期,最好使用服务器时间戳并使用以下安全规则来强制执行 安全规则
allow create: if request.resource.data.date_added == request.time &&
// other rules for the message body
客户端JS代码
const message = {
date_added: firebase.firestore.FieldValue.serverTimestamp();
}
使用
有关日期的更多选项,如果要将字段作为时间戳存储在Firestore中,则必须发送JavaScript对象或Firestore对象作为字段的值 如果要使用日期,只需说
newdate(x)
,其中x
是您之前尝试添加的毫秒值
如果您想使用时间戳,您需要做更多的工作,将
x
转换为秒和纳秒的组合,以传递给构造函数,如文档所示。您可以简单地使用以下行:
var myTimestamp = firebase.firestore.Timestamp.fromDate(new Date());
.fromDate
是来自Firebase的静态时间戳类的静态方法
参考:
更新:
有关云功能,请参见JGuo的评论:
如果您正在编写云函数,它将成为
admin.firestore.Timestamp.fromDate()
–JGuo 1月21日1:56
这里的游戏已经很晚了,但当我阅读OP的问题时,它特别说明了保留时区偏移。由于时间戳缺少偏移量,OP提出的问题看起来诚实的答案是否定的 我现在有一个相关的情况,我需要一个特定“天”的表示,但我需要偏移量。除了缺少偏移量外,h/m/s的时间戳最好是0。我被迫添加第二个字段来存储偏移量,或者执行类似字符串的操作:
'20200125-360'
我用以下方法解决了这个问题:
const created = firebase.firestore.Timestamp.fromDate(new Date()).toDate());
您必须在代码中明确地从“firebase/app”导入firebase
import * as firebase from 'firebase/app'
在实际保存到firestore之前,请确保您的已创建
或类型为日期的任何常量。在使用firebase.firestore.FieldValue.serverTimestamp时,我找到了一个适合我的解决方案:
moment(createdAt.toDate().toISOString()).fromNow()
这个问题已经有了好几个答案,但为了简单起见,我用自己的方式解释它
科特林代码
val dateObject = Date()
val timestamp = Timestamp(dateObject)
检查一下。你可以简单地使用servervalue:Maggini@E.Maggini的可能重复项。这不是该问题的重复项。这个问题不是关于将时间戳转换为日期,而是关于在Firestore中将时间戳保存为时间戳而不是数字。谢谢大家,我将签出用于转换的时间戳。我不能使用firebase.database.ServerValue.TIMESTAMP
值,因为我使用的一些日期不是当前日期。不确定这是否符合OP的后续评论:“我不能使用firebase.database.ServerValue.TIMESTAMP值,因为我使用的一些日期不是当前日期。”这很公平。这更像是一个创建规则,在这种情况下,所有日期都是新的,因此您可以使用它。然后使用“允许更新”规则,该规则表示您不能更改其值,因为添加时它不是这样的。那么,如果历史数据存在的话,这只是一个更新历史数据的例子。我同意我对日期变量的措辞应该是其他的,而不是“date_added”。不过,我很感激你的回答,因为有一天我可能会用到它!谢谢,这是最简单的解决方案,正是我想要的!出于某种原因,我找到的文档说您通过构造函数而不是静态方法传递了日期。直接发送新的date()或date.now()就足够了。Firebase/Firestore自行处理到时间戳的转换。此外,您还可以使用moment.js来处理所有日期操作。如果您正在编写云函数,它将变成admin.firestore.Timestamp.fromDate()
如何在应用程序脚本中访问此函数?特别是,date.now()
和date.parse()
返回历元编号。不要使用它们,而是new Date()
和new Date(…)
。请求javascript而不是Kotlin
嗨,Doug)您可以提供如何在Angular应用程序上创建时间戳的示例吗?
val dateObject = Date()
val timestamp = Timestamp(dateObject)