2017-11-18 12 views
0

Firebaseデータベースに追加された新しいアイテムの有効期限タイムスタンプを自動的に作成します。だから私は次の関数を書いた:Firebase関数:admin.database.ServerValue.TIMESTAMPを操作します。

exports.onCreateNewItem = functions.database.ref('/items/{item_id}').onCreate(event => { 
    var mergedUpdate = {}; 
    mergedUpdate['expiration'] = admin.database.ServerValue.TIMESTAMP + 2678400000; 
    return event.data.adminRef.update(mergedUpdate); 
}) 

しかし、それは動作しません。 /items/{item_id}/expirationの値は"[object Object]2678400000"ですが、31日後のタイムスタンプであると予想していました。

答えて

3

クラウド機能コードはGoogleサーバーで実行されるため、サーバー時間はDate.now()でアクセスできます。 admin.database.ServerValue.TIMESTAMPを使用する必要はありません。

exports.onCreateNewItem = functions.database.ref('/items/{item_id}').onCreate(event => { 
    var mergedUpdate = {}; 
    mergedUpdate['expiration'] = Date.now() + 2678400000; 
    return event.data.adminRef.update(mergedUpdate); 
}) 
+0

これは間違いありませんが、いくつかのニュアンスがあります。たとえば、 'Date.how()'と 'admin.database.ServerValue.TIMESTAMP'の値は同じであるとは保証されていません。つまり、 'Date.now()'は使用できず、例えばセキュリティルールで 'now'と正常に比較することはできません。だからあなたのアプローチはおそらく多くの場合には問題ありませんが、それはドロップインの代替ではありません。 –

+0

差が分範囲内にある限り、私は大丈夫です。これは当てはまりませんか? – user2145097

+0

Frankが彼のコメントで特定した時間の差は決して1秒を超えることはありません。 –

関連する問題