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

How to I get javascript date split code to work for all browsers?

本文关键字:适用于 浏览器 代码 拆分 javascript 日期      更新时间:2023-09-26

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

有没有办法让这段代码在所有浏览器中工作?

你永远不应该使用 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 都是可以接受的。

我的建议是使用类似jquery的东西来操纵DOM。Jquery增加了一个抽象级别,可以避免将代码适应"单一浏览器标准",因为即使今天(比几年前)好一点,基本上仍然没有真正的标准。

因此,例如,如果您执行$('#mydate'),jquery将在每个浏览器中检索该元素(使用IE getElementById等...),并且您不再需要担心您的代码是跨浏览器的。

$('#mydate').val()//假设它是一个输入,将检索值,然后你可以使用自己的逻辑。

希望对您有所帮助。