如何将OpenWeatherMap API返回的特定格式日期字符串转为JavaScript Date对象?
解决JavaScript解析'yyyy-mm-dd hh:mm:ss'格式日期为Date对象的问题
这个问题我之前对接OpenWeatherMap API时也踩过坑!直接用new Date('2018-04-28 09:00:00')确实会在不少环境里返回NaN——因为这种空格分隔的格式并不是JavaScript Date构造函数默认兼容的标准格式。给你几个简单靠谱的原生解决方法:
方法一:转成ISO 8601标准格式(最简单)
JavaScript对ISO 8601格式(yyyy-mm-ddThh:mm:ss)的支持非常完善,我们只需要把原字符串里的空格替换成T即可:
const owmDateStr = '2018-04-28 09:00:00'; const validDate = new Date(owmDateStr.replace(' ', 'T')); console.log(validDate); // 正确输出对应的Date对象
如果API返回的是UTC时间,还可以在末尾加上Z强制按UTC解析:
const utcDate = new Date(owmDateStr.replace(' ', 'T') + 'Z');
方法二:手动拆分参数构造Date对象(最稳妥)
如果需要兼容老旧浏览器,手动拆分日期时间的各个部分是最保险的方式。注意JavaScript的月份是从0开始计数(1月对应0,12月对应11),所以要把解析到的月份值减1:
const owmDateStr = '2018-04-28 09:00:00'; // 拆分日期和时间部分 const [dateSegment, timeSegment] = owmDateStr.split(' '); // 拆分年、月、日并转成数字 const [year, month, day] = dateSegment.split('-').map(Number); // 拆分时、分、秒并转成数字 const [hour, minute, second] = timeSegment.split(':').map(Number); // 构造Date对象,注意月份要减1 const validDate = new Date(year, month - 1, day, hour, minute, second);
这种方式完全不存在格式兼容性问题,所有支持JavaScript的环境都能正常工作。
方法三:用日期处理库(可选)
如果你的项目已经引入了moment.js或者date-fns这类日期处理库,那解析起来会更省心,直接指定格式即可:
moment.js示例:
const validDate = moment('2018-04-28 09:00:00', 'YYYY-MM-DD HH:mm:ss').toDate();
date-fns示例:
import { parse } from 'date-fns'; const validDate = parse('2018-04-28 09:00:00', 'yyyy-MM-dd HH:mm:ss', new Date());
内容的提问来源于stack exchange,提问作者John Seed
相关产品推荐
相关产品推荐

