酒跚骼 发表于 2025-6-2 22:39:10

时区转换工具+PWA离线网页

时区转换工具+PWA离线网页

一、时区转换工具对比

工具说明Date原生 JS API,有限的时区支持,无法指定时区,仅使用本地时区。Intl.DateTimeFormat原生格式化显示,可指定时区,但不能修改时区逻辑。luxon强烈推荐,现代、轻量、功能强,原生支持时区、时间戳、格式化等。dayjs + timezone 插件类似 moment,更现代,但时区支持需插件。moment-timezone功能全面但体积大,moment 官方已不推荐用于新项目。二、Luxon 使用示例

1. 美国时间 -> 中国时间

import { DateTime } from 'luxon'

const usTime = DateTime.fromISO('2025-04-01T11:11:00', { zone: 'America/Los_Angeles' })

const timestamp = usTime.toMillis()

const cnTime = usTime.setZone('Asia/Shanghai')

console.log('美国时间:', usTime.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ'))
console.log('时间戳:', timestamp)
console.log('对应的中国时间:', cnTime.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ'))美国时间:2025-04-01 11:11:00 GMT-7
时间戳:1743521460000
对应的中国时间:2025-04-02 02:11:00 GMT+82. 中国时间 -> 美国时间

const cn = DateTime.fromISO('2025-04-01T11:11:00', { zone: 'Asia/Shanghai' })

const us = cn.setZone('America/Los_Angeles')

console.log('中国时间:', cn.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ'))
console.log('对应的美国时间:', us.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ'))
console.log('时间戳(UTC):', cn.toMillis())3. 转换逻辑总结

场景方法指定时区的时间 → 时间戳DateTime.fromISO(...).toMillis()时间戳 → 指定时区时间DateTime.fromMillis(...).setZone(...)不同时区之间转换.setZone(...)时间格式化.toFormat('yyyy-MM-dd HH:mm:ss') 等4. 常用时区 ID 表

名称IANA 时区 ID北京/上海(Asia/Shanghai)Asia/Shanghai香港(Asia/Hong_Kong)Asia/Hong_Kong日本(Asia/Tokyo)Asia/Tokyo韩国(Asia/Seoul)Asia/Seoul新加坡(Asia/Singapore)Asia/Singapore印度(Asia/Kolkata)Asia/Kolkata美国西部 - 洛杉矶(America/Los_Angeles)America/Los_Angeles美国中部 - 芝加哥(America/Chicago)America/Chicago美国东部 - 纽约(America/New_York)America/New_York英国(Europe/London)Europe/London德国(Europe/Berlin)Europe/Berlin法国(Europe/Paris)Europe/Paris澳大利亚 - 悉尼(Australia/Sydney)Australia/Sydney新西兰(Pacific/Auckland)Pacific/Auckland夏威夷(Pacific/Honolulu)Pacific/HonoluluUTC(协调世界时)UTC三、时区转换脚本

1. NodeJS 脚本(使用 luxon)

const { DateTime } = require('luxon')

function convertTime({
timeStr = '2025-04-01 11:11:00',
fromZone = 'America/Los_Angeles',
toZone = 'Asia/Shanghai'
}) {
const fromTime = DateTime.fromFormat(timeStr, 'yyyy-MM-dd HH:mm:ss', { zone: fromZone })

const toTime = fromTime.setZone(toZone)

console.log(`原始时间 (${fromZone}):`, fromTime.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ'))
console.log(`时间戳(UTC 毫秒):`, fromTime.toMillis())
console.log(`转换后 (${toZone}):`, toTime.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ'))
}

// 修改这里的参数即可
convertTime({
timeStr: '2025-04-01 11:11:00',
fromZone: 'America/Los_Angeles',
toZone: 'Asia/Shanghai'
})2. Python 脚本(使用 pytz)

pip install pytzfrom datetime import datetime
import pytz

def convert_time(time_str='2025-04-01 11:11:00', from_zone='America/Los_Angeles', to_zone='Asia/Shanghai'):
    from_tz = pytz.timezone(from_zone)
    to_tz = pytz.timezone(to_zone)

    naive_dt = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
    from_dt = from_tz.localize(naive_dt)

    to_dt = from_dt.astimezone(to_tz)

    print(f'原始时间 ({from_zone}): {from_dt.strftime("%Y-%m-%d %H:%M:%S %Z%z")}')
    print(f'时间戳(UTC 秒): {int(from_dt.timestamp())}')
    print(f'转换后 ({to_zone}): {to_dt.strftime("%Y-%m-%d %H:%M:%S %Z%z")}')

# 修改参数即可
convert_time(
    time_str='2025-04-01 11:11:00',
    from_zone='America/Los_Angeles',
    to_zone='Asia/Shanghai'
)四、网页小工具

使用 Luxon + HTML 原生控件制作的小工具,支持:

[*]输入时间
[*]原始/目标时区选择
[*]时间戳显示
[*]一键复制
1. 代码展示

   
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 时区转换工具+PWA离线网页