Firebase용 Cloud Functions에서 서버 타임스탬프를 가져오려면 어떻게 해야 합니까?
웹, iOS 및 안드로이드에서 서버 타임스탬프를 풀 수 있다는 것을 알고 있습니다. 하지만 Firebase용 새로운 클라우드 기능은 어떻습니까?거기서 서버 타임스탬프를 가져오는 방법을 알 수 없습니다.사용 사례는 이메일이 도착할 때 타임스탬프를 기록하는 것입니다.
웹에서는 Firebase.database입니다.서버 값.타임스탬프
하지만 기능 노드 서버 인터페이스에서는 사용할 수 없는 것 같습니까?
시간이 늦었다고 생각하고 요점을 놓치고 있는 것 같아요.
편집
이렇게 초기화하고 있습니다.
admin.initializeApp(functions.config().firebase);
const fb = admin.database()
그러면 이렇게 불리고 있습니다.
Firebase.database.ServerValue.TIMESTAMP
그러나 이는 클라이언트 측 통합에서 비롯됩니다.Functions에서 Firebase는 이렇게 초기화되지 않습니다.해봤습니다
admin.database().ServerValue.TIMESTAMP
그리고.
fb.ServerValue.TIMESTAMP
이미 관리 SDK를 사용하고 있으므로 실시간 데이터베이스에 서버 측 타임스탬프를 쓰는 올바른 구문은 다음과 같습니다.
admin.database.ServerValue.TIMESTAMP
이렇게 하면 데이터베이스 서버가 현재 타임스탬프를 작성하는 명령으로 인식하는 소위 센티넬 값이 반환됩니다.
여기서 OP가 문의한 실시간 데이터베이스 대신 Cloud Firestore를 사용하는 경우 올바른 주문은 다음과 같습니다.
admin.firestore.FieldValue.serverTimestamp()
이 방법이 효과가 없으면 참조 문서에서 최신 업데이트 및 예제를 확인하십시오.
Firebase Admin SDK를 사용하는 경우 올바른 구문은 다음과 같습니다.
2023
// Cloud Firestore
import { Timestamp } from 'firebase-admin/firestore';
// usage
Timestamp.now()
(2021-2022)
// Cloud Firestore
admin.firestore.Timestamp.now();
(2019-08-27 확인):
const admin = require('firebase-admin');
// or
// import * as admin from 'firebase-admin';
// Using Cloud Firestore
admin.firestore.FieldValue.serverTimestamp()
// Using Realtime Database
admin.database.ServerValue.TIMESTAMP
미래의 독자들을 위해 분명히 하기 위해서입니다.
admin.database.ServerValue.TIMESTAMP
를 반환합니다.non-null Object
현재 타임스탬프를 자동으로 채우기 위한 자리 표시자 값입니다.실제 타임스탬프가 포함되어 있지 않습니다.데이터베이스는 명령을 실행할 때 이 자리 표시자를 바꿉니다.
▁a 안에서 .database.ref
그런 다음 예상대로 작동하며 타임스탬프를 입력하는 기본 방법입니다.
var sessionsRef = firebase.database().ref("sessions");
sessionsRef.push({
startedAt: firebase.database.ServerValue.TIMESTAMP // this will write 'startedAt: 1537806936331`
});
그러나 데이터베이스 기능 밖에서 사용하려고 하면(예: 지금 시간 반환 또는 일부 계산) 사용할 수 없는 개체가 반환됩니다.
console.log(firebase.database.ServerValue.TIMESTAMP) // this will return an [object Object]
자세한 내용은 firebase.database를 참조하십시오.서버 값 및 이 SO 질문에 표시됩니다.
Date.now()
밖에서 잘 작동합니다.database
계산 또는 기타 일반적인 용도로 사용할 경우 함수를 사용합니다.
console.log(Date.now()); // this will return 1537806936331
둘 다 사용 중입니다.unix time
는 1970년 1월 1일 목요일 00:00:00 협정 세계시(UTC) 이후 경과한 시간(초)이며, 시간대와는 무관합니다.클라이언트와 서버에서 동일한 번호입니다(... 또는 거의:-).unix 시간을 참조하십시오.
나도 node.js는 처음이지만 Date.now()는 내 테스트에서 작동합니다.
편집
질문하신 내용을 잘못 이해했습니다. Firebase 데이터베이스에 저장 중인 데이터에 타임스탬프를 기록하려고 하는지 몰랐습니다.저는 당신이 단순히 당신의 클라우드 기능을 실행하는 서버에서 시간을 얻고 싶어한다고 생각했습니다.메일이 하려면 " " " " " " " " " " " " " " " " " " " 를 합니다.admin.database.ServerValue.TIMESTAMP
의심의 여지 없이 최선의 접근법입니다.
단지 나 자신의 교육을 위해, 나는 시대가 어떻게 비교되는지 보기 위해 다음과 같은 기능을 썼습니다.저는 클라우드 기능 서버와 데이터베이스 서버의 시간이 매우 정확한 시간 참조와 동기화되기를 기대합니다.이 할 때 는 일반적으로 이기을실밀데이이타스베 입니다.Date.now()
timestamp를 하는 데 이 좀 늦은이 합리적입니다. 클라우드 기능이 데이터베이스에 연결되어 쓰기를 수행하는 데 시간이 좀 걸린다는 점에서 데이터베이스 타임스탬프가 조금 늦은 것이 합리적입니다.
exports.timeTest = functions.database.ref('/test/trigger')
.onWrite(event => {
const now= Date.now();
console.log('now=', now);
const timeVals = {
dateNow : now,
serverTimestamp : admin.database.ServerValue.TIMESTAMP
};
return event.data.ref.parent.child('times').update(timeVals);
});
사용 사례에 따라 다름
사례 1
문서 필드를 서버 타임스탬프로 설정하려는 경우
예는 다음과 같습니다.
user {
email: "example.com",
lastUpdated: admin.firestore.FieldValue.serverTimestamp(),
}
모serverTimestamp
null이 아닌 개체를 반환하며 현재 타임스탬프를 자동으로 채우기 위한 자리 표시자 값입니다.실제 타임스탬프가 포함되어 있지 않습니다.때 이 합니다.
*set(), create() 또는 update()와 함께 사용된 sentinel을 반환하여 기록된 데이터에 서버 생성 타임스탬프를 포함합니다.
@return set(), create() 또는 update() 호출에 사용할 FieldValue sentinel.*
사례 2
함수 논리에 서버 타임스탬프를 사용하려는 경우
if (currentTime == 6pm) // TODO: send push notifications
else // TODO: do nothing
당신이 하고 싶을지도 모른다는 것을 위해.
admin.firestore.Timestamp.now()
또는admin.firestore.Timestamp.fromDate(new Date())
좋은 읽을거리: https://bigcodenerd.org/firebase-server-timestamp-cloud-functions/
클라이언트 측의 Timestamp.now()에 해당하는 클라우드 함수에서 다음을 사용하면 현재 Timestamp를 반환합니다.
admin.firestore.Timestamp.now()
그러나 Timestamp from Date 개체를 초기화하려면 다음과 같이 할 수 있습니다.
admin.firestore.Timestamp.fromDate(new Date())
그리고 미래 또는 과거 날짜에 대해 타임스탬프를 초기화하려면 먼저 설정하려는 구문 분석 문자열 또는 설정 시간에서 Date 개체를 초기화하고 Timestamp.fromDate()로 전달합니다.
var date = new Date('Wednesday, October 30, 2019 09:10 PM')
//or date = new Date('2014-06-30T06:40:53+05:30')
var timestamp = admin.firestore.Timestamp.fromDate(date)
2020년 8월 16일 문서에 나와 있습니다.
https://cloud.google.com/firestore/docs/manage-data/add-data#server_timestamp
// Get the `FieldValue` object
const FieldValue = admin.firestore.FieldValue;
// Create a document reference
const docRef = db.collection('objects').doc('some-id');
// Update the timestamp field with the value from the server
const res = await docRef.update({
timestamp: FieldValue.serverTimestamp()
});
코드에서 사용한 방법은 다음과 같습니다.
const createUserDoc = (user) => {
const FieldValue = admin.firestore.FieldValue
return db.collection('users').doc(user.uid).set({
memberSince: FieldValue.serverTimestamp(),
})
}
시도할 수 있습니다.
const timestamp = admin.소방서Timestamp.now();
사용하다
const new_date = new Date()
console.log('time',new_date.getTime())
자세한 내용은 여기를 클릭하십시오.
console.log("Show current timestamp, in Milliseconds= " + Date.now());
언급URL : https://stackoverflow.com/questions/43567312/how-do-i-get-the-server-timestamp-in-cloud-functions-for-firebase
'programing' 카테고리의 다른 글
엔티티 프레임워크 ALTERTABLE 문이 FORIENT KEY (0) | 2023.07.17 |
---|---|
GPU에서 케라스 모델을 실행할 수 있습니까? (0) | 2023.07.17 |
쿼리로 인해 CPU 활용률이 높아지고 지연 시간이 길어짐 (0) | 2023.07.12 |
T-SQL 하위 문자열 - 마지막 3자 (0) | 2023.07.12 |
엔티티 프레임워크 및 다중 스키마 (0) | 2023.07.12 |