将日期对象转换为Firestore时间戳

时间:2018-12-09 11:00:17

标签: javascript firebase google-cloud-firestore

我正在尝试将日期对象转换为Firestore时间戳。

var dateOBJ = new Date(); 
var timeStamp = new firebase.firestore.Timestamp(dateOBJ);

这给了我一个错误:

Uncaught Error: Timestamp seconds out of range: Sun Dec 09 2018 11:37:05 GMT+0100

我尝试先使用.getTime()/ 1000将日期对象转换为秒,但仍然超出范围。

时间戳将是url的到期日期,因此我需要添加一些时间。

3 个答案:

答案 0 :(得分:1)

您将无法获得带有JavaScript日期的一致的服务器端时间戳。而是从SDK发送服务器时间戳:

ncols, nrows, cellsize, xllcorner, yllcorner

如果您仍想将时间戳记设置为日期,则只需将void SetUpTIFFDirectory(TIFF *tif) { double tiepoints[6]; double pixscale[3]; double upperLeftCorner_X, upperLeftCorner_Y; upperLeftCorner_X = xllcorner; upperLeftCorner_Y = yllcorner + (cellsize*nrows); tiepoint[0] = 0.0; tiepoint[1] = 0.0; tiepoint[2] = 0.0; tiepoint[3] = upperLeftCorner_X; tiepoint[4] = upperLeftCorner_Y; tiepoint[5] = 0.0; pixscale[0] = cellsize; pixscale[1] = cellsize; pixscale[2] = 0.0; TIFFSetField(tif,TIFFTAG_IMAGEWIDTH, ncols); TIFFSetField(tif,TIFFTAG_IMAGELENGTH, nrows); TIFFSetField(tif,TIFFTAG_BITSPERSAMPLE, 32); TIFFSetField(tif,TIFFTAG_COMPRESSION, COMPRESSION_NONE); TIFFSetField(tif,TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); TIFFSetField(tif,TIFFTAG_STRIPOFFSETS, 260L); TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL, 1); TIFFSetField(tif,TIFFTAG_ROWSPERSTRIP, nrows; TIFFSetField(tif,TIFFTAG_STRIPBYTECOUNTS, 80L); TIFFSetField(tif,TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT, 3; TIFFSetField(tif,GTIFF_TIEPOINTS, 6,tiepoints); TIFFSetField(tif,GTIFF_PIXELSCALE, 3,pixscale); } 传递到Firestore,它将保存为时间戳记。

答案 1 :(得分:1)

弗兰克(Frank)将时间戳设置为Firestore是正确的。

如果以后要在前端检查该时间戳,则需要在从Firestore返回的时间戳对象上使用.toDate,以将其转换为JS日期。

答案 2 :(得分:0)

有两种方法可以在Cloud Firestore中设置日期字段:

  1. 您为该字段指定一个Date值,在这种情况下,您将完全确定要写入的日期。
  2. 您指定firebase.firestore.FieldValue.serverTimestamp(),在这种情况下,服务器将写入当前日期。

API中无法将这两个选项组合使用,您只能使用其中一个。

由于您评论要存储时间戳和偏移量,因此这也是我要存储的内容:

  • 一个timestamp字段,可让服务器使用firebase.firestore.FieldValue.serverTimestamp()填充。
  • 一个offset字段,您使用天/小时的偏移量从应用程序中填充。

这样,您可以通过组合两个字段来重新构造有效的到期时间戳。


您甚至可以添加第三个字段来存储到期时间戳,但这将需要额外的写操作。我通常会在Cloud Functions中执行此操作,以确保您完全控制该字段,并且客户不会对其进行欺骗。如果您没有在Cloud Functions中执行此操作,请考虑编写安全规则,以确保在计算出的字段确实是该计算结果的情况下验证该值。