JavaScript Date()解析指定时间字符串返回错误时间的问题求助
JavaScript Date() 解析时间字符串异常的原因与解决办法
这问题其实是个很容易踩的坑,我来帮你拆解清楚:
核心问题:错误的Date调用方式
你代码里犯了一个关键错误——直接调用Date(ds)而不是new Date(ds)。
- 当你不带
new调用Date()时,不管传入什么参数,它都会直接返回当前时间的字符串表示,完全不会解析你传入的时间字符串。这就是为什么你看到的结果都是执行代码时的当前时间(17:26:57),和你传入的15:59没有任何关系。 - 只有使用
new Date(ds)创建Date实例时,JavaScript才会尝试解析传入的时间字符串,生成对应的时间对象。
时间字符串格式的兼容性问题
另外你提到的两种时间格式,还有个兼容性细节需要注意:
2018/2/28 15:59是ECMAScript规范明确支持的格式,所有浏览器和JavaScript运行环境都能正确解析为本地时间。2018-2-28 15:59属于非标准格式,不同环境的解析行为可能不一致(比如部分浏览器会把它当作UTC时间处理,导致本地时间显示偏差),建议尽量避免直接使用这种格式。
修正后的测试代码
把调用方式改成new Date(),再优化格式兼容性,代码就正常了:
var ds = "2018/2/28 15:59"; console.log(ds); var da = new Date(ds); console.log(da); // 输出:Thu Feb 28 2018 15:59:00 GMT+0800 (+08) ds = "2018-2-28 15:59"; console.log(ds); // 先把短横线替换成斜杠,统一格式 var formattedDs = ds.replace(/-/g, '/'); var da2 = new Date(formattedDs); console.log(da2); // 同样输出正确的目标时间
更可靠的时间解析方案
如果需要处理多种非标准时间格式,或者要保证跨环境的绝对一致性,建议手动拆分时间字段,用Date的构造函数逐个传入参数(注意:月份是从0开始计数的,2月对应索引1):
// 处理"2018-2-28 15:59"格式 var timeStr = "2018-2-28 15:59"; var [year, month, day, hour, minute] = timeStr.split(/[- :]/).map(Number); var da3 = new Date(year, month - 1, day, hour, minute); console.log(da3); // 精准生成目标时间
内容的提问来源于stack exchange,提问作者user3098791
相关产品推荐
相关产品推荐

