// format:yyyy-mm-dd h:i:s time:毫秒级时间戳
// y-年份 m-月份 d-日 h-小时 i-分 s-秒 q-季度 S-毫秒
function dateFtt(format,time)
{
// 以下的m,d,h,i,s,q,S,y只是正则表达式中一个普通文本,用于匹配相应的字符
// 以下的m+,d+,h+,i+,s+,q+,S+,y+ 意思为:匹配1个到多个的字符
// (y+)的意思是:y+匹配到的内容可能通过分组来取到,这里是通过第一个分组取到。从后面的代码中可以看出,RegExp.$1就是取到的y+匹配到的内容
// 1.直接量语法
// 语法:/pattern/ 比如 /(y+)/
// 2.创建 RegExp 对象
// 语法:new RegExp(pattern) 比如 new RegExp("(y+)")
// 这是使用的两种写法 效果一致
// if(/(y+)-(m+)/.test(format)){
// RegExp.$1为(y+)匹配到的内容
// RegExp.$2为(m+)匹配到的内容
// }
// test() 检索字符串中指定的值。返回 true 或 false。
// 语法 RegExpObject.test(string)
// substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
// 语法 stringObject.substr(start,length)
// start 必须数值 -1 最后一个字符 -2 的倒数第二个字符
// length 可选数值 忽略则是返回 开始位置到结尾的字符串
// replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
// 语法 stringObject.replace(regexp/substr,replacement)
// regexp/substr 必需 规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
// replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。
var date = new Date();
date.setTime(time); //写入时间
var o = {
"m+" : date.getMonth()+1, //月份
"d+" : date.getDate(), //日
"h+" : date.getHours(), //小时
"i+" : date.getMinutes(), //分
"s+" : date.getSeconds(), //秒
"q+" : Math.floor((date.getMonth()+3)/3), //季度
"S" : date.getMilliseconds() //毫秒
};
if(/(y+)/.test(format))
format=format.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)
if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); // 单位数前面补填0 双位数 则不管
return format;
}
网友评论