js日期格式转换 js日期格式转换 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写的基本全能的格式化日期的类, 还有个对应的php版的代码/*// @author : lael// blog : http://hi.baidu.com/lael80// http://www.gzyd.net// all right reserved.*/var dateutils = function(){}/*d : 日期字符串ff : (d : 日期字符串)原格式/未知为falsetf : 新格式f、ff、tf : 格式化字符串,由以下结构组成(具体参考php日期格式字符,但仅支持以下所列) 要直接显示以下字符,请用 \\ 转义,如:Y\\Y\\e\\ar-m-d H\\Houri:s//Y 4 位数字完整表示的年份 例如:1999 或 2003y 2 位数字表示的年份 例如:99 或 03//n 数字表示的月份,没有前导零 1 到 12m 数字表示的月份,有前导零 01 到 12e (非php定义,自定义的)中文月份 一月 到 十二月M 三个字母缩写表示的月份 Jan 到 DecF 月份,完整的文本格式,例如 January 或者 March January 到 December//j 月份中的第几天,没有前导零 1 到 31d 月份中的第几天,有前导零的 2 位数字 01 到 31//g 小时,12 小时格式,没有前导零 1 到 12G 小时,24 小时格式,没有前导零 0 到 23h 小时,12 小时格式,有前导零 01 到 12H 小时,24 小时格式,有前导零 00 到 23//i 有前导零的分钟数 00 到 59//s 秒数,有前导零 00 到 59//x (非php定义,自定义的)中文上下午a 小写的上午和下午值 am 或 pmA 大写的上午和下午值 AM 或 PM//D 星期中的第几天,文本表示,3 个字母 Mon 到 Sunl (“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturdayk (非php定义,自定义的)中文星期 星期日 到 星期六w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)//*//*<script language="javascript" src="{$CFG[skinpath]}javascript/dateutils.js"></script><script language="javascript"> var _dateutils = new dateutils(); alert(_dateutils.format('2001-12-23 星期日 21:11:10', 'Y-m-d H:i:s', 'Y-m-d H:i:s')); alert(_dateutils.format('2001-12-23 星期日 21:11:10', false, 'Y-m-d H:i:s'));</script> */dateutils.prototype.format = function(d, ff, tf){ var wk = [['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], ['Sun', 'Mon', 'Tur', 'Wed', 'Thu', 'Fri', 'Sat'], ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']]; var mh = [['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']]; var c = this.newdate(d, ff); var o = { 'Y' : c.getFullYear(), 'y' : c.getYear(), 'n' : c.getMonth() + 1, 'm' : this.fatstr(c.getMonth() + 1, 2, '0'), 'e' : mh[0][c.getMonth()], 'M' : mh[1][c.getMonth()], 'F' : mh[2][c.getMonth()], 'j' : c.getDate(), 'd' : this.fatstr(c.getDate(), 2, '0'), 'g' : (c.getHours() > 12 ? c.getHours() - 12 : c.getHours()), 'h' : this.fatstr(c.getHours() > 12 ? c.getHours() - 12 : c.getHours(), 2, '0'), 'G' : c.getHours(), 'H' : this.fatstr(c.getHours(), 2, '0'), 'i' : this.fatstr(c.getMinutes(), 2, '0'), 's' : this.fatstr(c.getSeconds(), 2, '0'), 'x' : (c.getHours() >= 0 && c.getHours() < 12 ? '上午' : '下午'), 'a' : (c.getHours() >= 0 && c.getHours() < 12 ? 'am' : 'pm'), 'A' : (c.getHours() >= 0 && c.getHours() < 12 ? 'AM' : 'PM'), 'k' : wk[0][c.getDay()], 'D' : wk[1][c.getDay()], 'l' : wk[2][c.getDay()], 'w' : c.getDay() }; if(!tf)tf = 'Y-m-d H:i:s'; var r = this.formatregexp(tf); var m = this.stripformat(tf).match(r); if(!m)return this.stripformat(tf); var n = r.substr(1, r.length - 2); for(var i = 1; i < m.length; i ++){ n = n.replace('(' + m[i] + ')', o[m[i]]); } return this.stripregexp(n);}dateutils.prototype.validator = function(d, f){ return this.format(d, f, f) == d;}dateutils.prototype.newdate = function(d, f){ try{if(d.getFullYear())return d;}catch(e){} var n = ['', '', '', '', '', '']; if(f){ var _d = d.match(this.dateregexp(f)); var _f = this.stripformat(f).match(this.formatregexp(f)); if(_d && _f){ var mh = [['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']]; var aA = 0; var gh = false; var GH = false; for(var i = 0; i < _f.length; i ++){ if(_f[i] == 'y')n[0] = '20' + _d[i]; if(_f[i] == 'Y')n[0] = _d[i]; if(_f[i] == 'e' || _f[i] == 'M' || _f[i] == 'F' || _f[i] == 'n' || _f[i] == 'm'){ var _n = this.inarray(_d[i], mh[0]); if(_n == -1)_n = this.inarray(_d[i], mh[1]); if(_n == -1)_n = this.inarray(_d[i], mh[2]); n[1] = _n == -1 ? _d[i] * 1 - 1 : _n; } if(_f[i] == 'j' || _f[i] == 'd')n[2] = _d[i]; if(_f[i] == 'g' || _f[i] == 'h'){gh = true; n[3] = _d[i];} if(_f[i] == 'G' || _f[i] == 'H'){GH = true; n[3] = _d[i];} if(_f[i] == 'a' || _f[i] == 'A'){ if(_d[i] == 'am' || _d[i] == 'AM'){ aA = 0; }else{ aA = 12; } } if(_f[i] == 'x'){ if(_d[i] == '上午' || _d[i] == '下午'){ aA = 0; }else{ aA = 12; } } if(_f[i] == 'i')n[4] = _d[i]; if(_f[i] == 's')n[5] = _d[i]; } if(GH === false && gh)n[3] = n[3] * 1 + aA;//上下午调整 } } var _d = new Date(d); if(isNaN(_d))_d = new Date(this.rpdate(d)); if(isNaN(_d))_d = new Date(); if(!/\d{4}/.test(n[0]))n[0] = _d.getFullYear(); if(!/(0*[0-9]|1[0-1])/.test(n[1]))n[1] = _d.getMonth(); if(!/(0*[1-9]|[1-2][0-9]|30|31)/.test(n[2]))n[2] = _d.getDate(); if(!/([0-1]*[0-9]|20|21|22|23)/.test(n[3]))n[3] = _d.getHours(); if(!/([0-5]*[0-9])/.test(n[4]))n[4] = _d.getMinutes(); if(!/([0-5]*[0-9])/.test(n[5]))n[5] = _d.getSeconds(); return (new Date(n[0], n[1], n[2], n[3], n[4], n[5]));}dateutils.prototype.rpdate = function(d){ if(!d)return ''; return d.replace(/上午|am|AM/g, '') .replace(/下午|pm|PM/g, '') .replace(/星期日|Sunday/gi, 'Sun') .replace(/星期一|Monday/gi, 'Mon') .replace(/星期二|Tuesday/gi, 'Tur') .replace(/星期三|Wednesday/gi, 'Wed') .replace(/星期四|Thursday/gi, 'Thu') .replace(/星期五|Friday/gi, 'Fri') .replace(/星期六|Saturday/gi, 'Sat') .replace(/一月|January/gi, 'Jan') .replace(/二月|February/gi, 'Feb') .replace(/三月|March/gi, 'Mar') .replace(/四月|April/gi, 'Apr') .replace(/五月|May/gi, 'May') .replace(/六月|June/gi, 'Jun') .replace(/七月|July/gi, 'Jul') .replace(/八月|August/gi, 'Aug') .replace(/九月|September/gi, 'Sep') .replace(/十月|October/gi, 'Oct') .replace(/十一月|November/gi, 'Nov') .replace(/十二月|December/gi, 'Dec') .replace(/-|年|月/g, '/') .replace(/时|分/g, ':') .replace(/日|秒/g, ' ') .replace(/\s+/g, ' ');}//将格式字符串转成正则表达式dateutils.prototype.formatregexp = function(f){ if(!f)return ''; var _f = f.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '\\$1'); _f = _f.replace(/(Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)/g, '($1)'); _f = _f.replace(/\\\\\((Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)\)/g, '$1');//取消已经转义的格式字符 return '^' + _f + '$';}dateutils.prototype.dateregexp = function(f){ var _f = this.formatregexp(f); return _f.replace(/(\()(Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)(\))/g, '$1.+$3');}//删除多余转义字符dateutils.prototype.stripformat = function(f){ if(!f)return ''; return f.replace(/\\(Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)/g, '$1');}//取消正则成普通字符串dateutils.prototype.stripregexp = function(r){ if(!r)return ''; return r.replace(/\\([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '$1');}dateutils.prototype.addslashes = function(s){ return s.replace(/\\/g, '\\\\');}dateutils.prototype.stripslashes = function(s){ return s.replace(/\\\\/g, '\\');}dateutils.prototype.fatstr = function(s, l, f){ s = s.toString(); try{ if(s.length == l)return s; }catch(e){ s = ''; } var t = s.length; for(var i = 0; i < l - t; i ++){ s = f + s; } return s;}dateutils.prototype.inarray = function(v, arr){ for(var i = 0; i < arr.length; i ++){ if(v.toLowerCase() == arr[i].toLowerCase())return i; } return -1;} 你輸入的是JAN (一月) 01(2001年) 0001 (1號)解析無誤話說樓主知道什麼是ISO標準格式嗎? 想要0001年的話 new Date("0001-01-01") 即可 惭愧,惭愧,因为用了ef,时间字段不是可空的,若数据表为空时读取出来经后台转换后的就是上述的格式,用js再次转后出现了这种问题. js 时间解析莫非跟c#的规则不一样么.. 新人求帮助啊。 拖拽文件夹到浏览器获取该文件夹的结构 js有没有哪个方法可以判断一个字符串中所包含哪些符号?麻烦写下具体的实现代码! ff中,return false不起作用? Safari难题!!! 关于邮件打开标题,自动跳转的问题 js 左右文字移动 不懂javascript,请懂的人帮帮忙 获取鼠标坐标值,返回NaN 一个小问题 js新人求解。javascript中 input.onclick =btnClick,和 input.onclick()的区别是什么? 如果用JS控制textarea的垂直下拉条默认为拉到最底?
/*
// @author : lael
// blog : http://hi.baidu.com/lael80
// http://www.gzyd.net
// all right reserved.
*/
var dateutils = function(){}
/*
d : 日期字符串
ff : (d : 日期字符串)原格式/未知为false
tf : 新格式f、ff、tf : 格式化字符串,由以下结构组成(具体参考php日期格式字符,但仅支持以下所列)
要直接显示以下字符,请用 \\ 转义,如:Y\\Y\\e\\ar-m-d H\\Houri:s
//
Y 4 位数字完整表示的年份 例如:1999 或 2003
y 2 位数字表示的年份 例如:99 或 03
//
n 数字表示的月份,没有前导零 1 到 12
m 数字表示的月份,有前导零 01 到 12
e (非php定义,自定义的)中文月份 一月 到 十二月
M 三个字母缩写表示的月份 Jan 到 Dec
F 月份,完整的文本格式,例如 January 或者 March January 到 December
//
j 月份中的第几天,没有前导零 1 到 31
d 月份中的第几天,有前导零的 2 位数字 01 到 31
//
g 小时,12 小时格式,没有前导零 1 到 12
G 小时,24 小时格式,没有前导零 0 到 23
h 小时,12 小时格式,有前导零 01 到 12
H 小时,24 小时格式,有前导零 00 到 23
//
i 有前导零的分钟数 00 到 59
//
s 秒数,有前导零 00 到 59
//
x (非php定义,自定义的)中文上下午
a 小写的上午和下午值 am 或 pm
A 大写的上午和下午值 AM 或 PM
//
D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun
l (“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
k (非php定义,自定义的)中文星期 星期日 到 星期六
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
//
*/
/*
<script language="javascript" src="{$CFG[skinpath]}javascript/dateutils.js"></script>
<script language="javascript">
var _dateutils = new dateutils();
alert(_dateutils.format('2001-12-23 星期日 21:11:10', 'Y-m-d H:i:s', 'Y-m-d H:i:s'));
alert(_dateutils.format('2001-12-23 星期日 21:11:10', false, 'Y-m-d H:i:s'));
</script>
*/
dateutils.prototype.format = function(d, ff, tf){
var wk = [['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
['Sun', 'Mon', 'Tur', 'Wed', 'Thu', 'Fri', 'Sat'],
['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']];
var mh = [['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']]; var c = this.newdate(d, ff);
var o = {
'Y' : c.getFullYear(),
'y' : c.getYear(),
'n' : c.getMonth() + 1,
'm' : this.fatstr(c.getMonth() + 1, 2, '0'),
'e' : mh[0][c.getMonth()],
'M' : mh[1][c.getMonth()],
'F' : mh[2][c.getMonth()],
'j' : c.getDate(),
'd' : this.fatstr(c.getDate(), 2, '0'),
'g' : (c.getHours() > 12 ? c.getHours() - 12 : c.getHours()),
'h' : this.fatstr(c.getHours() > 12 ? c.getHours() - 12 : c.getHours(), 2, '0'),
'G' : c.getHours(),
'H' : this.fatstr(c.getHours(), 2, '0'),
'i' : this.fatstr(c.getMinutes(), 2, '0'),
's' : this.fatstr(c.getSeconds(), 2, '0'),
'x' : (c.getHours() >= 0 && c.getHours() < 12 ? '上午' : '下午'),
'a' : (c.getHours() >= 0 && c.getHours() < 12 ? 'am' : 'pm'),
'A' : (c.getHours() >= 0 && c.getHours() < 12 ? 'AM' : 'PM'),
'k' : wk[0][c.getDay()],
'D' : wk[1][c.getDay()],
'l' : wk[2][c.getDay()],
'w' : c.getDay()
};
if(!tf)tf = 'Y-m-d H:i:s';
var r = this.formatregexp(tf);
var m = this.stripformat(tf).match(r);
if(!m)return this.stripformat(tf);
var n = r.substr(1, r.length - 2);
for(var i = 1; i < m.length; i ++){
n = n.replace('(' + m[i] + ')', o[m[i]]);
}
return this.stripregexp(n);
}
dateutils.prototype.validator = function(d, f){
return this.format(d, f, f) == d;
}
dateutils.prototype.newdate = function(d, f){
try{if(d.getFullYear())return d;}catch(e){}
var n = ['', '', '', '', '', ''];
if(f){
var _d = d.match(this.dateregexp(f));
var _f = this.stripformat(f).match(this.formatregexp(f));
if(_d && _f){
var mh = [['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']];
var aA = 0;
var gh = false;
var GH = false;
for(var i = 0; i < _f.length; i ++){
if(_f[i] == 'y')n[0] = '20' + _d[i];
if(_f[i] == 'Y')n[0] = _d[i];
if(_f[i] == 'e' || _f[i] == 'M' || _f[i] == 'F' || _f[i] == 'n' || _f[i] == 'm'){
var _n = this.inarray(_d[i], mh[0]);
if(_n == -1)_n = this.inarray(_d[i], mh[1]);
if(_n == -1)_n = this.inarray(_d[i], mh[2]);
n[1] = _n == -1 ? _d[i] * 1 - 1 : _n;
}
if(_f[i] == 'j' || _f[i] == 'd')n[2] = _d[i];
if(_f[i] == 'g' || _f[i] == 'h'){gh = true; n[3] = _d[i];}
if(_f[i] == 'G' || _f[i] == 'H'){GH = true; n[3] = _d[i];}
if(_f[i] == 'a' || _f[i] == 'A'){
if(_d[i] == 'am' || _d[i] == 'AM'){
aA = 0;
}else{
aA = 12;
}
}
if(_f[i] == 'x'){
if(_d[i] == '上午' || _d[i] == '下午'){
aA = 0;
}else{
aA = 12;
}
}
if(_f[i] == 'i')n[4] = _d[i];
if(_f[i] == 's')n[5] = _d[i];
}
if(GH === false && gh)n[3] = n[3] * 1 + aA;//上下午调整
}
}
var _d = new Date(d);
if(isNaN(_d))_d = new Date(this.rpdate(d));
if(isNaN(_d))_d = new Date();
if(!/\d{4}/.test(n[0]))n[0] = _d.getFullYear();
if(!/(0*[0-9]|1[0-1])/.test(n[1]))n[1] = _d.getMonth();
if(!/(0*[1-9]|[1-2][0-9]|30|31)/.test(n[2]))n[2] = _d.getDate();
if(!/([0-1]*[0-9]|20|21|22|23)/.test(n[3]))n[3] = _d.getHours();
if(!/([0-5]*[0-9])/.test(n[4]))n[4] = _d.getMinutes();
if(!/([0-5]*[0-9])/.test(n[5]))n[5] = _d.getSeconds();
return (new Date(n[0], n[1], n[2], n[3], n[4], n[5]));
}
dateutils.prototype.rpdate = function(d){
if(!d)return '';
return d.replace(/上午|am|AM/g, '')
.replace(/下午|pm|PM/g, '')
.replace(/星期日|Sunday/gi, 'Sun')
.replace(/星期一|Monday/gi, 'Mon')
.replace(/星期二|Tuesday/gi, 'Tur')
.replace(/星期三|Wednesday/gi, 'Wed')
.replace(/星期四|Thursday/gi, 'Thu')
.replace(/星期五|Friday/gi, 'Fri')
.replace(/星期六|Saturday/gi, 'Sat')
.replace(/一月|January/gi, 'Jan')
.replace(/二月|February/gi, 'Feb')
.replace(/三月|March/gi, 'Mar')
.replace(/四月|April/gi, 'Apr')
.replace(/五月|May/gi, 'May')
.replace(/六月|June/gi, 'Jun')
.replace(/七月|July/gi, 'Jul')
.replace(/八月|August/gi, 'Aug')
.replace(/九月|September/gi, 'Sep')
.replace(/十月|October/gi, 'Oct')
.replace(/十一月|November/gi, 'Nov')
.replace(/十二月|December/gi, 'Dec')
.replace(/-|年|月/g, '/')
.replace(/时|分/g, ':')
.replace(/日|秒/g, ' ')
.replace(/\s+/g, ' ');
}
//将格式字符串转成正则表达式
dateutils.prototype.formatregexp = function(f){
if(!f)return '';
var _f = f.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '\\$1');
_f = _f.replace(/(Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)/g, '($1)');
_f = _f.replace(/\\\\\((Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)\)/g, '$1');//取消已经转义的格式字符
return '^' + _f + '$';
}
dateutils.prototype.dateregexp = function(f){
var _f = this.formatregexp(f);
return _f.replace(/(\()(Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)(\))/g, '$1.+$3');
}
//删除多余转义字符
dateutils.prototype.stripformat = function(f){
if(!f)return '';
return f.replace(/\\(Y|y|n|m|e|M|F|j|d|g|h|G|H|i|s|x|a|A|k|D|l|w)/g, '$1');
}
//取消正则成普通字符串
dateutils.prototype.stripregexp = function(r){
if(!r)return '';
return r.replace(/\\([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '$1');
}
dateutils.prototype.addslashes = function(s){
return s.replace(/\\/g, '\\\\');
}
dateutils.prototype.stripslashes = function(s){
return s.replace(/\\\\/g, '\\');
}
dateutils.prototype.fatstr = function(s, l, f){
s = s.toString();
try{
if(s.length == l)return s;
}catch(e){
s = '';
}
var t = s.length;
for(var i = 0; i < l - t; i ++){
s = f + s;
}
return s;
}
dateutils.prototype.inarray = function(v, arr){
for(var i = 0; i < arr.length; i ++){
if(v.toLowerCase() == arr[i].toLowerCase())return i;
}
return -1;
}
解析無誤話說樓主知道什麼是ISO標準格式嗎?