php date strtotime js简版
两个函数为简版函数,实现了基本的php date与strtotime功能
/**
* js版php date1
* @param {string} foramt 格式化字符串,支持的格式有:"Y-m-d H:i:s w"
* @param {string}|{int} timestamp 秒时间戳,选填,默认为当前时间戳
* @returns {string} 日期
*/
function date(foramt, timestamp){
if(typeof foramt === 'undefined'){
throw new Error('Invalid argument');
}
var date = timestamp ? new Date(timestamp * 1000) : new Date();
var string = foramt
.replace(/Y/g, date.getFullYear())
.replace(/m/g, (function(d){
var value = d.getMonth() + 1;
if(value < 10){
value = '0' + value;
}
return value;
})(date))
.replace(/d/g, (function(d){
var value = d.getDate();
if(value < 10){
value = '0' + value;
}
return value;
})(date))
.replace(/H/g, (function(d){
var value = d.getHours();
if(value < 10){
value = '0' + value;
}
return value;
})(date))
.replace(/i/g, (function(d){
var value = d.getMinutes();
if(value < 10){
value = '0' + value;
}
return value;
})(date))
.replace(/s/g, (function(d){
var value = d.getSeconds();
if(value < 10){
value = '0' + value;
}
return value;
})(date))
.replace(/w/g, (function(d){
var value = d.getDay();
if(!value){
value = 7;
}
return value;
})(date))
;
return string;
}
/**
* js版php strtotime
* @param {string}|{int} time 时间表达式,若无参数,函数返回当前秒时间戳,若有参数,则为获取时间表达式,与php用法相同
* @param {string}|{int} now 秒时间戳,用于时间表达式的参考时间戳,选填,若无参数,则应用当前秒时间戳
* @returns {number} 时间戳
*/
function strtotime(time, now){
if(typeof time === 'undefined'){
return parseInt(+new Date() / 1000);
}
var date_match = time.match(/^\d{4}(\/|\-)\d{2}(\/|\-)\d{2}$/g);
if(date_match !== null){
var s = date_match[0].split(date_match[0].substr(4, 1));
return parseInt(+new Date(s[0], s[1] - 1, s[2]) / 1000);
}else{
var date = now ? new Date(now * 1000) : new Date();
var m = time.match(/(\+|\-)\d+ (year|month|day|hour|minute|second|week)/g);
if(m){
var arr, value, unit;
for(var i = 0; i < m.length; i++){
arr = m[i].split(' ');
value = parseInt(arr[0]);
unit = arr[1];
switch(unit){
case 'year':
date.setFullYear(date.getFullYear() + value);
break;
case 'month':
date.setMonth(date.getMonth() + value);
break;
case 'day':
date.setDate(date.getDate() + value);
break;
case 'hour':
date.setHours(date.getHours() + value);
break;
case 'minute':
date.setMinutes(date.getMinutes() + value);
break;
case 'second':
date.setSeconds(date.getSeconds() + value);
break;
case 'week':
date.setDate(date.getDate() + (value * 7));
break;
}
}
}
return parseInt(+date / 1000);
}
}