谁能解释为什么我的日期函数通过 JS 日期对象给了我错误的转换
Can anyone explain why my date function is giving me a wrong conversion via JS date object?
很抱歉标题,如果它不能很好地解释我的问题。
我的脚本中遇到了一个奇怪的问题,在初始阶段,我将日期字符串转换为毫秒,然后在脚本中稍后将其转换回清晰的日期格式。给我带来问题的日期字符串是具有常规日期的字符串,但也附加了小时。下面是一个示例:
legitDate = function (date) {
var months = ['01', '02', '03', '04', '05', '06',
'07', '08', '09', '10', '11', '12'];
return months[date.getUTCMonth()] + "/" + date.getUTCDate() + "/" + date.getUTCFullYear()
}
var init = Date.parse("1/27/2016 7:00:00 PM");
var ayy = new Date(init);
var result = legitDate(ayy);
最终结果为 1/28/2016,而不是原来的 1/27/2016。我不知道为什么这种转换会以这种方式发生。
不要使用 Date 构造函数(或 Date.parse,它们执行相同的操作)来分析字符串。ECMA-262 中指定的唯一格式是 ISO 8601 的子集,并非所有正在使用的浏览器都支持这种格式,并且在某些地方两者不一致。OP 中的格式与 ISO 8601 不一致,因此解析完全取决于实现。
始终手动分析字符串。库可以提供帮助,但为特定格式编写解析器并不难。
要根据主机时区偏移量(即"本地")解析类似"1/27/2016 7:00:00 PM"的字符串,请考虑以下将缺失值视为零并验证结果日期:
// Parse string in 1/27/2016 7:00:00 PM format
// Missing time values are treated as zero
// If any value is invalid, returns an invalid date (time value NaN)
function parseDate(s) {
var b = s.match(/'d+/g) || [];
var hr = (/pm's*/.test(s)? 12 :0) + (+b[3] || 0);
var d = new Date(b[2], --b[0], b[1], hr, (b[4]||0), (b[5]||0));
// Validate the generated date against input values
return d && d.getMonth() == b[0] && (b[3] || 0) < 13 &&
d.getMinutes() == (b[4] || 0)? d : new Date(NaN);
}
['1/27/2016 7:00:00 PM',
'2/29/2016 12:45:15 am',
'6/31/2016 12:45:15 am', // invalid date
'2/29/2016 13:45:15 am', // invalid hours
'2/29/2016 06:45am' , // missing seconds
'2/29/2016' // missing time asssumed as 00:00:00
].forEach(function(s) {
document.write(parseDate(s) + '<br>');
});
尝试更改并指定 UTC
var init = Date.parse("1/27/2016 7:00:00 PM UTC");
相关文章:
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- Chrome Javascript日期构造函数错误
- 如何修复FF和IE中的Javascript无效日期错误
- SlickGrid根据日期错误动态构建列
- windows中的Javascript巨大日期错误..解决方案
- 日期类googleappscript的日期错误
- 打包电子应用程序后出现无效日期错误
- 角度材料的日期选择器日期错误
- 角度日期错误
- 基本周视图的完整日历结束日期错误
- 用Javascript创建的日期错误
- node.js mySQL NOW()给出的日期错误
- 根据字符串创建时,Javascript日期错误
- Javascript数组日期错误
- Firefox使用new Date(). gettime()定义日期错误
- 谷歌图表:日期错误
- javascript new Date()或moment.js解析日期错误
- JavaScript日期错误2014年2月
- C3 js折线图获取日期错误
- 格式日期错误在烬JS:无法找到属性的对象