如何将 2017年9月25日 转换成 2017-09-25

如何将 2017年9月25日 转换成 2017-09-25

阅读 11.3k
20 个回答
'2017年9月25日'.replace(/[年月]/g,'-').replace('日','');

岂不美哉?

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+/g)
  .map(num => num.padStart(2, '0'))
  .join('-');
'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日'.split(/[年月日]/).slice(0,3).join('-');
'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('-');

如果你用node打包工具的话 可以用时间处理插件moment

正则,repalce

'2017年9月25日'.match(/d+/g).map(num => num.length < 4 ? ('0' + num).slice(-2) : num).join('-');

新手上路,请多包涵

'2017年9月25日'.split(/[年月日]/,3).map(function(v){return v<10?0+v:v}).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}
})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏