Seguí diferentes respuestas de aquí y aquí .
Estoy empezando a aprender Cloud Tasks desde aquí . En esa publicación de blog, Doug dice "Lo que quiero es que expirationAtSeconds sea el tiempo de vencimiento expresado en epoch segundos ".
Quiero que la tarea elimine la publicación cuando se establezca ese tiempo. En mi aplicación iOS, creo una publicación que caduca en un momento específico:
let timeStamp = Date().timeIntervalSince1970 let postDate: Date = Date(timeIntervalSince1970: timeStamp) var expirationDate: Date? = Calendar.current.date(byAdding: .hour, value: +24, to: postDate) guard let exp = expirationDate else { return } let expiresAt = exp.timeIntervalSince1970 dict.updateValue(expiresAt, forKey: "expiresAt") dict.updateValue(timeStamp, forKey: "postDate") // other values ... ref.updateChildValues(dict)lo que me da un valor de base de datos como:
posts some_post_Id -"expiresAt": 1632627680.340107 // other values ... En mi función de nube, quiero la fecha expiresAt , que es un Double expresado en Epoch segundos. No estoy seguro si debo usar expDate1 , expDate2 , expDate3 o expDate4 :
exports.onCreatePost = functions.database.ref('/posts/{postId}').onCreate((snapshot, context) => { const post = snapshot.data(); const expiresAt = snapshot.child("expiresAt").val(); const expirationDate = expiresAt.valueOf(); // 1632627680.340107 var expDate1 = DateTime.fromMillisecondsSinceEpoch(expirationDate * 1000) var expDate2 = DateTime.fromMicrosecondsSinceEpoch(expirationDate * 1000000) var expDate3 = DateTime.fromMicrosecondsSinceEpoch(expirationDate.microsecondsSinceEpoch) var expDate4 = expirationDate.toDate() const expirationAtSeconds = either expDate1, expDate2, expDate3, or expDate4 // continue on with the rest of the code ... });De mi pregunta, ninguno de los métodos DateTime anteriores funcionó para mí porque seguía recibiendo un error TypeError: Cannot read property 'DateTime' of undefined .
Tuve que usar una new Date(expirationDate * 1000) y obtuve la conversión a epoch segundos desde aquí
Código:
const functions = require("firebase-functions"); const admin = require('firebase-admin'); admin.initializeApp(); exports.onCreatePost = functions.database.ref('/posts/{postId}').onCreate((snapshot, context) => { const post = snapshot.data(); const expiresAt = snapshot.child("expiresAt").val(); const expirationDate = expiresAt.valueOf(); // 1632627680.340107 const expDate = new Date(expirationDate * 1000); // <--------Here const expirationAtSeconds = expDate.getTime()/1000.0; // <-------- this will be epoch seconds conversion console.log("expDate: " + expDate + " | expirationAtSeconds:" + expirationAtSeconds); // continue on with the rest of the code ... });