今天在工作中遇到这样一个问题:使用jquery ui的datepicker日历控件,获取选中的日期,并且要将日期转换成日期对象格式,如:Tue Nov 30 00:00:00 UTC+0800 2010,以便与其他代码对接。
我的代码如下:
$("#mydate").datepicker({
showOn: "button",
buttonImage: "images/calendar.gif",
buttonImageOnly: true,
buttonText:"日历",
onSelect:function(dateText,inst){
alert(dateText);
//dateText:"2014-04-23"
r = new Date(dateText);
alert(r);
...do something...
}
}
我要实现的效果是:当点击日历控件,选中日期时,获取当前日期,并转换日期格式赋值给变量r,用于后面更复杂的工作。
我们知道,jaascript用来创建一个日期对象,返回当前的日期和时间,直接使用new Date,如:
var date = new Date();
alert(date);
输出的是当前日期和时间,格式为:Tue Nov 30 00:00:00 UTC+0800 2010。直接可以使用在项目中,而且在IE和火狐上都正常。
可是,如果是new Date()接收外部传来的参数如我使用datepicker中用到new Date(dateText)。这个时候用火狐和谷歌浏览器测试,能正常输出日期格式为:Tue Nov 30 00:00:00 UTC+0800 2010。但是在IE7上就杯具了,IE7输出的结果为:NaN。
我们可以借鉴fullcalendar中的一个日期函数,而不要直接调用js中原生态的new Date(),
function parseISO8601(s, ignoreTimezone) { // ignoreTimezone defaults to false
// derived from http://delete.me.uk/2005/03/iso8601.html
// TODO: for a know glitch/feature, read tests/issue_206_parseDate_dst.html
var m = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);
if (!m) {
return null;
}
var date = new Date(m[1], 0, 1);
if (ignoreTimezone || !m[13]) {
var check = new Date(m[1], 0, 1, 9, 0);
if (m[3]) {
date.setMonth(m[3] - 1);
check.setMonth(m[3] - 1);
}
if (m[5]) {
date.setDate(m[5]);
check.setDate(m[5]);
}
fixDate(date, check);
if (m[7]) {
date.setHours(m[7]);
}
if (m[8]) {
date.setMinutes(m[8]);
}
if (m[10]) {
date.setSeconds(m[10]);
}
if (m[12]) {
date.setMilliseconds(Number("0." + m[12]) * 1000);
}
fixDate(date, check);
} else {
date.setUTCFullYear(
m[1],
m[3] ? m[3] - 1 : 0,
m[5] || 1
);
date.setUTCHours(
m[7] || 0,
m[8] || 0,
m[10] || 0,
m[12] ? Number("0." + m[12]) * 1000 : 0
);
if (m[14]) {
var offset = Number(m[16]) * 60 + (m[18] ? Number(m[18]) : 0);
offset *= m[15] == '-' ? 1 : -1;
date = new Date(+date + (offset * 60 * 1000));
}
}
return date;
}
function fixDate(d, check) { // force d to be on check's YMD, for daylight savings purposes
if (+d) { // prevent infinite looping on invalid dates
while (d.getDate() != check.getDate()) {
d.setTime(+d + (d < check ? 1 : -1) * HOUR_MS);
}
}
}
不难看出,代码能将格式为“2010-11-26”的日期转换为:“Fri Nov 26 00:00:00 UTC+0800 2010 ”的格式。于是,在我的代码中直接调用这个函数处理下就OK。最终代码:
$("#mydate").datepicker({
showOn: "button",
buttonImage: "images/calendar.gif",
buttonImageOnly: true,
buttonText:"日历",
onSelect:function(dateText,inst){
alert(dateText);
var r = parseISO8601(dateText); //转换格式
alert(r);
...do something...
}
}
分享到:
相关推荐
解决new Date()在IE中出现NaN的字符。详细解决方案代码见.txt文件中。
综上所述,当在IE8中使用`new Date()`时,开发者需要考虑到上述兼容性和特性的差异,确保代码在所有目标浏览器中都能正常运行。在开发过程中,使用像Babel这样的工具将ES6+代码转换为IE8兼容的ES5语法也是个好选择,...
在IE浏览器中,发现一个特殊情况:当`new Date()`无法正确解析字符串格式的日期时,它返回的日期对象在调试器中显示为`NaN`。然而,这个`NaN`实际上并不是真正的`NaN`类型,而是一个特殊的日期对象,该对象在调用...
在Java编程中,`new Date()` 用于创建一个表示当前日期和时间的对象。然而,有时候开发者可能会遇到这样一个问题:使用 `new Date()` 输出的时间与系统的实际时间相差了八个小时。这种情况通常是由时区(TimeZone)...
在微信小程序开发中,`new Date()`方法是用于创建日期对象的关键方法,但在某些情况下可能会出现失效的问题,尤其是在特定的移动设备或操作系统上。根据给出的文件信息,可以了解微信小程序中`new Date()`方法失效的...
然而,不同的浏览器实现可能在解析日期字符串时存在差异,这在Firefox和IE浏览器中尤其明显,因为它们对日期格式的解析规则有所不同,导致在某些情况下,使用new Date(str)在IE中可能返回一个无效的日期对象。...
以上只是JavaScript在IE与Firefox中兼容性问题的一部分,实际开发中可能遇到更多细节。解决这些问题需要对两种浏览器的特性有深入理解,并使用条件注释、polyfills和现代JavaScript库(如jQuery)来确保代码在各种...
例如,代码`var date1 = new Date(dateTimes[z][1])`在Firefox下可以正常工作,但在IE7下却失败了。这是因为不同的浏览器对日期字符串解析的标准支持不同。IE7可能不支持按照预期方式解析包含日期和时间的字符串,而...
本文件“js在火狐和IE浏览器的差异.zip”着重讨论了JavaScript在Mozilla Firefox(火狐)与Internet Explorer(IE)之间的区别,以下是对这些差异的详细阐述: 1. **DOM操作差异**: - Firefox和IE对Document ...
这个组件的目标是确保在不同浏览器如Internet Explorer(IE)、Firefox、Opera和Chrome等上都能正常工作。 在JavaScript中,处理日期和时间通常涉及到内置的Date对象,但不同的浏览器可能对Date对象的某些方法或...
根据给定文件的信息,我们可以总结出以下几个重要的Java时间处理知识点: ### 1. Java日期与时间的基本操作 #### 1.1 创建当前日期与时间...掌握了这些内容,就可以较为熟练地在Java程序中处理各种日期和时间问题了。
以上只是JavaScript在IE和Firefox之间兼容性问题的一部分,实际开发中可能还会遇到更多细节问题。解决这些问题通常需要深入理解各浏览器的差异,并结合条件判断、库或框架等技术手段来实现跨浏览器的代码。在编写...
在Java编程中,`new Date()` 和 `Calendar.getInstance().getTime()` 都是获取当前系统时间的方法,但有时可能会出现获取到的时间与预期不符的情况。这种问题通常与时区设置、系统时间、Java运行环境以及代码逻辑...
在给定的标题“日期控件(支持火狐和IE)”中,我们可以理解到这是一个专为Firefox和Internet Explorer(IE)浏览器设计的日期选择器。在过去的Web开发中,由于浏览器之间的兼容性问题,实现跨浏览器的日期控件是一...
### JavaScript 中 new Date() 方法详解 #### 一、概述 在JavaScript编程语言中,`Date`对象被用来处理日期和时间。通过`new Date()`构造函数可以创建一个表示特定时间的`Date`对象实例,该实例可以是当前时间或者...
JavaScript 兼容性问题在开发跨浏览器的网页应用时至关重要,尤其是针对IE和Firefox这两个具有显著差异的浏览器。本文将详细探讨这些差异,并提供相应的兼容性处理方案。 首先,我们来看函数和方法的差异。在...
就是获取表单中的日期往后台通过json方式传的时候,遇到Date.parse(str)函数在ff下报错: NAN 找了些资料,发现是由于Date.parse()函数对日期格式有要求:详细参考 Date.parse函数 对于js操作日期: 创建一个日期对象: ...