我正在尝试将日期对象转换为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的到期日期,因此我需要添加一些时间。
答案 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中设置日期字段:
Date
值,在这种情况下,您将完全确定要写入的日期。firebase.firestore.FieldValue.serverTimestamp()
,在这种情况下,服务器将写入当前日期。API中无法将这两个选项组合使用,您只能使用其中一个。
由于您评论要存储时间戳和偏移量,因此这也是我要存储的内容:
timestamp
字段,可让服务器使用firebase.firestore.FieldValue.serverTimestamp()
填充。offset
字段,您使用天/小时的偏移量从应用程序中填充。这样,您可以通过组合两个字段来重新构造有效的到期时间戳。
您甚至可以添加第三个字段来存储到期时间戳,但这将需要额外的写操作。我通常会在Cloud Functions中执行此操作,以确保您完全控制该字段,并且客户不会对其进行欺骗。如果您没有在Cloud Functions中执行此操作,请考虑编写安全规则,以确保在计算出的字段确实是该计算结果的情况下验证该值。