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

TypeScript中转换yyyy-MM-dd hh格式字符串为日期及修改GMT方法

TypeScript 字符串转日期:处理 yyyy-MM-dd hh 格式与时区调整

一、解决 yyyy-MM-dd hh 格式解析失败的问题

new Date() 对非ISO 8601标准格式的字符串解析兼容性差,yyyy-MM-dd hh 这种带空格的小时格式不属于标准格式,因此会返回无效日期。可以通过以下两种方法处理:

方法1:手动拆分字符串构造日期

直接拆分字符串中的年、月、日、小时,用Date构造函数手动创建日期(注意月份是0起始,需要减1):

const dateStr = '2022-07-01 01';
const [datePart, hour] = dateStr.split(' ');
const [year, month, day] = datePart.split('-').map(Number);
// 构造日期:year, month(0-11), day, hour
const date = new Date(year, month - 1, day, hour);

方法2:转换为ISO 8601标准格式

把空格替换为T,补全分钟和秒,转成标准ISO格式后再解析:

const dateStr = '2022-07-01 01';
// 转换为 '2022-07-01T01:00:00'
const isoDateStr = dateStr.replace(' ', 'T') + ':00:00';
const date = new Date(isoDateStr);

二、调整GMT时区

Date对象本质是基于UTC的时间戳,但可以通过以下方式控制解析或显示时的时区:

1. 构造时指定时区

在ISO格式字符串末尾添加时区偏移,比如要解析为GMT+08:00的时间:

const dateStr = '2022-07-01 01';
const isoWithTimezone = dateStr.replace(' ', 'T') + ':00:00+08:00';
const date = new Date(isoWithTimezone);

2. 调整现有日期的时区偏移

如果已有一个Date对象,要转换到目标时区,可以通过计算时区偏移量调整时间戳:

const originalDate = new Date('2022-07-01');
// 目标时区:GMT+7(偏移分钟数为7*60)
const targetTimezoneOffset = 7 * 60;
// 当前本地时区的偏移(UTC与本地时间的分钟差,比如GMT+8的话是-480)
const localOffset = originalDate.getTimezoneOffset();
// 计算调整后的时间戳
const adjustedTimestamp = originalDate.getTime() + (targetTimezoneOffset + localOffset) * 60 * 1000;
const adjustedDate = new Date(adjustedTimestamp);

注意

Date对象的toString()方法会默认显示本地时区的时间,如果需要以指定时区格式化输出,可以用toLocaleString并指定时区参数:

const date = new Date('2022-07-01T01:00:00');
// 以GMT+7时区格式化输出(Asia/Bangkok对应GMT+7)
console.log(date.toLocaleString('en-US', { timeZone: 'Asia/Bangkok' }));

内容的提问来源于stack exchange,提问作者Phạm Cường

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:15:36