今天在工作中遇到这样一个问题:使用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()的问题,需要的朋友可以参考下
//格式化函数,跟此文无关 在其他浏览器下正常,但是在ie下,程序报错 在ie调试器下,发现date 为NaN,如图: 如果是NaN,那么if判断会返回true,会 return “”,但是诡异的一幕发生了, 代码说明if判断返回了...
在火狐下 可以正常取得时间,在IE7下 却是 NaN。纠结老长时间,放弃了new date 然后再老外的论坛中找了一段段代码可以兼容所有浏览器的格式化日期代码: 代码如下: function NewDate(str) { str = str.split(‘-‘);...
IE中new Date(strDate)返回无效时间解决方式: 方法一: function getDateForStringDate(strDate){ //切割年月日与时分秒称为数组 var s = strDate.split(" "); var s1 = s[0].split("-"); var s2 = s[1].split...
java 时间转换 date time = new date() 对时间的格式化。这个可以帮助大家解决时间的问题
ios使用如下方法获得NaN,安卓手机则是正常计算,解决方法是换个这个时间的格式 new Date(2017-04-28 23:59:59).getTime() 换成如下方式就正常了,就是‘-‘换成‘/’ new Date(2017/04/28 23:59:59).getTime() ...
一个用于日期选择的js控件,兼容IE,firefox。 使用方法: 1)引用js文件:WebCalendar.js 2)在需要的地方调用方法:SelectDate(obj,'yyyy-MM-dd'),其中obj为日期输入目标的引用(好像说复杂了,其实很多时候我们只用...
NULL 博文链接:https://chwshuang.iteye.com/blog/947220
js中获取时间new date()的用法
就是获取表单中的日期往后台通过json方式传的时候,遇到Date.parse(str)函数在ff下报错: NAN 找了些资料,发现是由于Date.parse()函数对日期格式有要求:详细参考 Date.parse函数 对于js操作日期: 创建一个日期对象: ...
IE和Firefox下都好使 使用方法: 1、传入对象:SelectDate(this,'yyyy 年') 2、传入 ID:SelectDateById('Txt_CreateDateST01','yyyy 年') 3、参数 SelectDate(this,'yyyy 年',0,-150) 格式(注意大小写):yyyy→年...
NULL 博文链接:https://ollevere.iteye.com/blog/1320854
下面小编就为大家带来一篇Linux下date命令,格式化输出,时间设置方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
而IE浏览器的话就显示正常的: 现在时间是:2008年1月26日 原因就是javascrīpt的兼容性问题 var today = new date();var year = today.getYear(); 在Firefox里面getYear返回的是 “当前年份-1900” 的值,而微软...
日期控件 支持火狐和IE, 绝对没问题的
new Date()出来的时间比当前时间早8小时,改注册表,从没问题的机器上输入regedit 之后找到HKEY_LOCAL_MACHINE\SOFTWARE\MIRCOSOFT\WINDOWS NT\CURRENT VERSION\TIME ZONES导出来。也可以直接用我上传的这个