如何将 2017年9月25日 转换成 2017-09-25
function format( str ) {
var result = /^(\d+)年(\d+)月(\d+)日$/.exec(str)
if( result ) {
var y = result[ 1 ];
var m = result[ 2 ];
var d = result[ 3 ];
m = Number( m ) < 10 ? '0' + m : m;
d = Number( d ) < 10 ? '0' + d : d;
return y + '-' + m + '-' + d;
}
return null;
}
console.log( format( '2017年9月25日' ) ) // 2017-09-25
排第一的哥们写得很简洁,但是记得要处理 9月 -> 09 这种前面补零的情况
'2017年9月25日'
.match(/\d{1,4}/g).join('-')
.replace(/\d+/g, function(d) {
return (d.length > 1)? d : ('0' + d);
})
'2017年9月25日'
.replace(/(\d+)日/, function(_d, d) {
return (d.length == 2)? ('-' + d) : ('-0' + d);
})
.replace(/(\d+)月/, function(_m, m) {
return (m.length == 2)? ('-' + m) : ('-0' + m);
})
.replace(/(\d+)年/, function(_y, y) {
return y;
})
'2017年9月25日'
.replace(/(\d+)[年,月,日]/g, function(_d,d) {
return (d.length > 1) ? d.length == 4 ? d : ('-' + d) : ('-0' + d);
})
'2017年9月25日'.match(/\d+/g).join('-')
加上09
的情况则是:
'2017年9月25日'.match(/\d+/g).map(n => +n < 10 ? '0'+n : n).join('-')
可以用正则:
'2017年9月25日'.replace(/(\d{4})年(\d{1,2})月(\d{1,2})日/, (a,b,c,d)=>{
return `${b}-${c>9?c:'0'+c}-${d}`
})
'2017年9月25日'.replace(/^(\d+)年(\d+)月(\d+)日$/, function($, $1, $2, $3) {
return $1 + '-' + ('00' + $2).slice(-2) + '-' + $3
})
var str = '2017年02月25日';
function format(str){
return str.replace(/^(\d+)年(\d+)月(\d+)日$/,'$1-$2-$3');
}
alert(format(str));
或者
var str = '2017年02月25日';
function format(str){
var result = /^(\d+)年(\d+)月(\d+)日$/.exec(str);
if(result){
return result.slice(1,4).join("-");
}
return null;
}
alert(format(str));
function format( str ) {
var result = /^(\d+)年(\d+)月(\d+)日$/.exec(str)
if( result ) {
var y = result[ 1 ];
var m = result[ 2 ];
var d = result[ 3 ];
m = Number( m ) < 10 ? '0' + m : m;
d = Number( d ) < 10 ? '0' + d : d;
return y + '-' + m + '-' + d;
}
return null;
}
楼上的很对,在给你一个函数
Date.prototype.format = function (fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}
var date = new Date();
var seperator1 = "-";
var year = date.getFullYear();
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var today = year + seperator1 + month + seperator1 + strDate;
'2017年9月25日'.split(/[年月日]/).slice(0, 3).map(function(item, index) {
if (item.length < 2) {
item = '0' + item
}
return item;
}).join('-');
'2017年9月25日'.match(/d+/g).map(num => num.length < 4 ? ('0' + num).slice(-2) : num).join('-');
这个用正则应该是最方便的:
var reg = /(\d{4})年(\d{1,2})月(\d{1,2})日/;
var str = ' 2017年9月25日';
var res = str.replace(reg, '$1-$2-$3');
console.log(res); // 2017-9-25 处理月日字符串补0的话忽略了
'2017年9月25日'.replace(/(d{4})年(d{1,2})月(d{1,2})日/, (a,b,c,d)=>{
return ${b}-${c>9?c:'0'+c}-${d>9?d:'0'+d}
})
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.2k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
岂不美哉?