如何将任意日期转为洛杉矶PST时间并转Unix时间戳?解决代码报错
问题分析
你报错的核心原因是:代码里的result是字符串类型(调用toUTCString()和replace()后把Date对象转成了文本),而字符串没有getTime()方法,自然会触发错误。
正确实现方法
Unix时间戳本质是UTC时间从1970-01-01 00:00:00开始的毫秒数,我们不需要把Date对象转成字符串,直接操作Date对象完成时区转换后,再调用getTime()即可。
1. 当前本地时间转PST/Unix时间戳
如果需要自动处理夏令时(PST为UTC-8,PDT为UTC-7),推荐用时区标识符America/Los_Angeles自动适配:
// 目标时区:美国太平洋时区(自动切换PST/PDT) const targetTimeZone = "America/Los_Angeles"; const now = new Date(); // 计算本地时间与太平洋时区的时差(毫秒) const pacificTimeMs = new Date(now.toLocaleString("en-US", { timeZone: targetTimeZone })).getTime(); const timeDiffMs = pacificTimeMs - now.getTime(); // 得到太平洋时区的Date对象 const pacificDate = new Date(now.getTime() + timeDiffMs); // 获取Unix时间戳(毫秒),需要秒级则除以1000取整 const unixTimestamp = pacificDate.getTime(); console.log("太平洋时区时间:", pacificDate.toString()); console.log("对应Unix时间戳(毫秒):", unixTimestamp); console.log("对应Unix时间戳(秒):", Math.floor(unixTimestamp / 1000));
如果不需要自动处理夏令时,固定使用PST(UTC-8):
const now = new Date(); // 构造当前PST时间的Date对象 const pstDate = new Date(Date.UTC( now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours() - 8, // PST比UTC晚8小时 now.getUTCMinutes(), now.getUTCSeconds() )); const unixTimestamp = pstDate.getTime(); console.log("PST时间:", pstDate.toString()); console.log("对应Unix时间戳:", unixTimestamp);
2. 任意日期转PST/Unix时间戳
针对指定的本地日期,转换为PST时间戳:
// 示例:任意本地时间的Date对象 const arbitraryLocalDate = new Date("2024-05-20 15:30:00"); const targetTimeZone = "America/Los_Angeles"; // 转换为目标时区的Date对象 const pacificDate = new Date(arbitraryLocalDate.toLocaleString("en-US", { timeZone: targetTimeZone })); // 获取时间戳 const unixTimestamp = pacificDate.getTime(); console.log("转换后的太平洋时区时间:", pacificDate.toString()); console.log("对应Unix时间戳:", unixTimestamp);
3. 直接指定PST时间转时间戳
如果已知具体的PST时间,直接构造带时区的Date对象即可:
// 构造PST时间(格式:YYYY-MM-DDTHH:mm:ss±HH:mm) const pstDate = new Date("2024-05-20T10:00:00-08:00"); const unixTimestamp = pstDate.getTime(); console.log("指定PST时间的Unix时间戳:", unixTimestamp);
内容的提问来源于stack exchange,提问作者Andrés Gómez
相关产品推荐
相关产品推荐

