You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS中将带时区的日期字符串转换为UTC时间?

解决JavaScript中带时区缩写的日期转UTC问题

JavaScript原生Date对象对CET、BST这类时区缩写的解析支持极差——这类缩写没有统一标准(比如BST同时指代英国夏令时和孟加拉国标准时),不同JS引擎的解析行为不一致,甚至直接解析失败。要可靠处理这类带时区缩写的日期,推荐使用专业的日期库,以下是两种常用方案:

方案一:使用Luxon库

Luxon对时区解析的支持非常完善,能处理时区缩写并关联对应的IANA时区(避免歧义):

  1. 安装依赖:
npm install luxon
  1. 代码实现:
import { DateTime } from 'luxon';

// 输入的带时区缩写的日期字符串
const inputDate = '2023-02-02 15:35 CET';
// 解析为指定时区的DateTime对象(CET对应IANA时区Europe/Paris)
const zonedDateTime = DateTime.fromFormat(inputDate, 'yyyy-MM-dd HH:mm z', { zone: 'Europe/Paris' });
// 转换为UTC时间
const utcDateTime = zonedDateTime.toUTC();

// 输出结果
console.log(utcDateTime.toString()); // 示例输出:"2023-02-02T14:35:00.000Z"
console.log(utcDateTime.toJSDate()); // 转换为原生Date对象

方案二:使用date-fns + date-fns-tz

date-fns搭配date-fns-tz扩展,也能实现时区转换:

  1. 安装依赖:
npm install date-fns date-fns-tz
  1. 代码实现:
import { parse } from 'date-fns';
import { zonedTimeToUtc } from 'date-fns-tz';

const inputDate = '2023-02-02 15:35 CET';
// 先解析日期结构,再关联对应的IANA时区(Europe/Paris对应CET)
const parsedDate = parse(inputDate, 'yyyy-MM-dd HH:mm z', new Date());
// 将指定时区的时间转换为UTC
const utcDate = zonedTimeToUtc(parsedDate, 'Europe/Paris');

console.log(utcDate.toISOString()); // 示例输出:"2023-02-02T14:35:00.000Z"

注意事项

  • 时区缩写存在歧义时,必须指定对应的IANA时区(比如Europe/London对应BST,Asia/Dhaka也对应BST),否则解析结果可能出错。
  • 不推荐手动维护时区缩写到偏移量的映射表:夏令时会导致偏移量动态变化,手动维护成本极高且容易出错。

内容的提问来源于stack exchange,提问作者Roman Pecho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:22:33