天天看点

javascript生成指定日期和指定格式时间

有时候想获取一个时间,时间有格式,想生成自己想要的格式,或者自己输入一个时间按指定的格式给输出

1: new Date()

var myDate = new Date();

myDate.getYear(); //获取当前年份(2位)

myDate.getFullYear(); //获取完整的年份(4位,1970-???)

myDate.getMonth(); //获取当前月份(0-11,0代表1月) // 所以获取当前月份是myDate.getMonth()+1;

myDate.getDate(); //获取当前日(1-31)

myDate.getDay(); //获取当前星期X(0-6,0代表星期天)

myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)

myDate.getHours(); //获取当前小时数(0-23)

myDate.getMinutes(); //获取当前分钟数(0-59)

myDate.getSeconds(); //获取当前秒数(0-59)

myDate.getMilliseconds(); //获取当前毫秒数(0-999)

myDate.toLocaleDateString(); //获取当前日期

var mytime=myDate.toLocaleTimeString(); //获取当前时间

myDate.toLocaleString( ); //获取日期与时间

javascript生成指定日期和指定格式时间

操作日期

javascript生成指定日期和指定格式时间

注意:表示月份的参数介于 0 到 11 之间。也就是说,如果希望把月设置为 8 月,则参数应该是 7。

在下面的例子中,我们将日期对象设置为 5 天后的日期:

javascript生成指定日期和指定格式时间

传入时间并按指定格式输出:

function dateTime2str(dateTime, format) {

var z = {

y: dateTime.getFullYear(),

M: dateTime.getMonth() + 1,

d: dateTime.getDate(),

h: dateTime.getHours(),

m: dateTime.getMinutes(),

s: dateTime.getSeconds()

};

return format.replace(/(y+|M+|d+|h+|m+|s+)/g, function(v) {

return ((v.length > 1 ? “0” : “”) + eval(‘z.’ + v.slice(-1))).slice(-(v.length > 2 ? v.length : 2))

});

}

dateTime2str(new Date(),“yyyy-MM-dd hh:mm:ss”)

javascript生成指定日期和指定格式时间

解读:

这里使用一个replace方法,format.replace,对“yyyy-MM-dd hh:mm:ss” .replace()处理

javascript生成指定日期和指定格式时间
javascript生成指定日期和指定格式时间

/(y+|M+|d+|h+|m+|s+)/g 正则表达式 : n+ 表示匹配(字符n 1次或者多次),| 表示或 ;所以这个表达式,会去匹配1个或多个y后,轮询往下匹配其他字符

首先匹配 y,进行修改替换,之后M

replace((regexp/substr,replacement)当第二个参数为函数时表示处理文本的函数

上面例子中:

function(v) {return ((v.length>1?“0”:"")+eval(‘z.’+v.slice(-1))).slice(-(v.length>2?v.length:2))})

是 匿名函数

根据/(y+|M+|d+|h+|m+|s+)/g 首次匹配到’yyyy’,传给匿名函数处理

v.length>1 为真,所以取0

eval(‘z.’+v.slice(-1)) —> eval(‘z.’+‘yyyy’.slice(-1))—> eval(z.y)

z.y 对应上面的数据

按上面的例子来讲:这里算出来就是 ‘02018’

之后:‘02018’.slice(-(‘yyyy’.length>2?‘yyyy’.length:2)) 等于 ‘02018’.slice(-4)

javascript生成指定日期和指定格式时间

从倒数第4位开始取 ,算下来 等于 2018

OK,年份就取取来了,接下来就是去匹配M了

继续阅读