所以這就是下面的代碼應該做的。我基本上是在制作在不同時區的午夜標記過期的物件。我認為我應該這樣做的方法是首先獲取用戶位置并找到相應的時區。從那里,獲取該時區中的當前日期并創建一個時間格式的字串 (currentTimestamp),使其在一天結束時的晚上 11:59:59 到期。然后將此時間轉換為 UTC(因為這是服務器的運行方式),然后顯然我最終會在時間過去時從我的資料庫中洗掉該物件。例如,我試圖讓它在上海時區作業,但我得到了一個奇怪且非常錯誤的 UTC 時刻值。這是它的樣子:
let timezone = tzlookup(latitude, longitude);
let currentDate = new Date()
let localizedDateAndTime = moment.tz(currentDate, timezone).format('YYYY-MM-DD hh:mm:ss')
let localizedDate = moment.tz(currentDate, timezone).format('YYYY-MM-DD')
console.log("Timezone: " timezone)
console.log("Local Time: " localizedDateAndTime)
console.log("UTC Time: " moment.tz(currentDate, 'UTC').format())
let date = ("0" currentDate.getDate()).slice(-2);
let month = ("0" (currentDate.getMonth() 1)).slice(-2);
let year = currentDate.getFullYear();
let currentTimestamp = localizedDate " " 23 ":" 59 ":" 59
console.log("Localized timestamp: " currentTimestamp)
var localizedMoment = moment.tz(currentTimestamp, 'YYYY-MM-DD hh:mm:ss', timezone);
var utcMoment = localizedMoment.utc()
console.log("UTC Moment (when event expires in UTC): " utcMoment.format('YYYY-MM-DD hh:mm:ss'))
let timestamp = utcMoment.format('YYYY-MM-DD hh:mm:ss')
https://i.stack.imgur.com/deRbS.png
所以我想現在不應該是 03:59:59,而是像 15:59:59 這樣的時間,對吧?不知道為什么它會轉換為 03:59:59 ...
uj5u.com熱心網友回復:
這確實是一個擴展評論。
你的代碼太復雜了。任何時候您認為需要通過創建和決議字串來執行日期操作時,都應該重新考慮您在做什么。在這種情況下,您只需創建一個日期,設定時區,將其設定為一天結束,然后將時間戳生成為 UTC,例如
let loc = 'Asia/Shanghai';
let currentDate = new Date()
let localDate = moment.tz(currentDate, loc);
localDate.endOf('day');
console.log(localDate.utc().format('YYYY-MM-DD HH:mm:ss'));
// One statement:
console.log(
moment.tz(new Date(), loc)
.endOf('day')
.utc()
.format('YYYY-MM-DD HH:mm:ss')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.33/moment-timezone-with-data.min.js"></script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313659.html
標籤:javascript 节点.js 约会时间 瞬间 时区
上一篇:不同時期的不一致索引只有一種型別
