我有一段代码可以在Chrome和MSIE中运行但在Opera和Firefox中失败
var end = Browser.getValue(getElement("mydate"));
var parts = end.split('.');
var us_date = parts[1]+'/'+parts[0]+'/'+parts[2];
var someDate = new Date(us_date);
var numberOfDaysRemove = 1;
someDate.setDate(someDate.getDate() - numberOfDaysRemove);
var returndate = someDate.getDate() + '.' + (someDate.getMonth() + 1) + '.' + someDate.getFullYear() + " " + someDate.getHours() + ':' + someDate.getMinutes();
我知道为什么它在Opera和Firefox中不起作用,因为我需要替换
var parts = end.split('.');
var returndate = someDate.getDate() + '.' + (someDate.getMonth() + 1) + '.' + someDate.getFullYear() + " " + someDate.getHours() + ':' + someDate.getMinutes();
与
var parts = end.split('/');
var returndate = someDate.getDate() + '/' + (someDate.getMonth() + 1) + '/' + someDate.getFullYear() + " " + someDate.getHours() + ':' + someDate.getMinutes();
当我这样做时,它无法在Chrome或MSIE中工作。
有没有办法让这些代码在所有浏览器中都有效?
答案 0 :(得分:2)
你应该从不使用Date构造函数或Date.parse(执行相同的操作)解析字符串,因为它几乎完全依赖于实现且不可靠。 始终手动解析字符串,库可以提供帮助,但如果您只需要支持一种或两种格式,那么定制函数就是微不足道的。
鉴于你有:
var end = Browser.getValue(getElement("mydate"));
var parts = end.split('.');
var us_date = parts[1]+'/'+parts[0]+'/'+parts[2];
我怀疑 end 类似于" dd.mm.yyyy",所以用最后一行代替:
var someDate = new Date(parts[2], parts[1]-1, parts[0]);
自从javascript发明以来,它将在每个浏览器中运行。
假设日期字符串是" dd.mm.yyyy",无论分隔符如何,解析它的简单函数是:
/* Parse date string in format d/m/y
** @param {string} s - date string
** @returns {Date} date object
*/
function parseDMY(s) {
var b = s.split(/\D/);
return new Date(b[2], b[1]-1, b[0]);
}
document.write(parseDMY('23.01.2016'));

这假设值是有效日期并且允许任何非数字分隔符,因此d.m.y,d / m / y和d-m-y都是可接受的。
答案 1 :(得分:0)
我的建议是使用像jquery这样的东西来操纵DOM。 Jquery,增加了一个抽象级别,允许避免必须使代码适应单个浏览器标准",因为即使今天比几年前好一点,基本上仍然没有真正的标准
因此,例如,如果你执行$(' #mydate'),jquery将在每个浏览器中检索该元素(使用IE getElementById等...)并且您不再需要担心关于你的代码是跨浏览器。
$(' #mydate')。val()//假设它是一个输入,将检索该值,然后您可以使用自己的逻辑。
希望它有所帮助。