如何让javascript日期分割代码适用于所有浏览器?

时间:2016-01-20 08:56:24

标签: javascript google-chrome firefox

我有一段代码可以在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中工作。

有没有办法让这些代码在所有浏览器中都有效?

2 个答案:

答案 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()//假设它是一个输入,将检索该值,然后您可以使用自己的逻辑。

希望它有所帮助。