Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将日期转换为时间戳,以便在javascript中存储到firebase firestore中_Javascript_Firebase_Date_Timestamp_Google Cloud Firestore - Fatal编程技术网

将日期转换为时间戳,以便在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)