Node.js moment 时区转换未按预期工作

Node.js moment timezone conversion not working as expected

这就是下面的代码应该做的。我本质上是在制作在不同时区的午夜标记处过期的对象。我认为我应该这样做的方法是首先获取用户位置并找到相应的时区。从那里获取该时区的当前日期并制作一个时间格式的字符串 (currentTimestamp),以便它在当天结束时 11:59:59 PM 到期。然后将这个时间转换为 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...

这真是一篇扩展评论。

你的代码太复杂了。任何时候您认为您需要通过创建和解析字符串来执行日期操作,您应该重新考虑您在做什么。在这种情况下,您只需创建一个日期,设置时区,将其设置为一天结束,然后将您的时间戳生成为 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>