js日期格式转换的相关问题探讨

探讨问题1: 如何将 2017年8月22日 转换成 2017-8-22 / 2017-08-22呢

'2017年8月22日'.replace(/[年月日]/g,'-');

'2017年8月22日'.match(/d+/g).join('-')
'2017年8月22日'.replace(/[年月]/g,'-').replace('日','');

点评:第一种形式 返回的是

2017-8-22-
//这时我们可以通过字符串截取来处理
'2017年8月22日'.replace(/[年月日]/g,'-').slice(0,-1);  

上面日期 如果小于10,补0 ,则需要用如下方法

'2017年8月22日'.match(/d+/g).map(n => +n < 10 ? '0'+n : n).join('-')

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年8月22日'))
'2017年8月22日'.match(/d{1,4}/g).join('-').replace(/d+/g, function(d) {
   return (d.length > 1)? d : ('0' + d);
})
     
'2017年8月22日'.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年8月22日'.replace(/(d+)[年,月,日]/g, function(_d,d) {
   return (d.length > 1) ? d.length == 4 ? d : ('-' + d) : ('-0' + d);
})

'2017年8月22日'.replace(/(d{4})年(d{1,2})月(d{1,2})日/, (a,b,c,d)=>{
   return `${b}-${c>9?c:'0'+c}-${d}`
 })

探讨问题2: 如何计算指定月份的天数

要想得到某月有多少天,只需要获取到当月最后一天的日期就行了

围绕这一思路,灵活调用 setMonth(),getMonth(),setDate(),getDate(),计算出所需日期

function getMonthLength(date) {
  let d = new Date(date)
  // 将日期设置为下月一号
  d.setMonth(d.getMonth()+1)
  d.setDate('1')
  // 获取本月最后一天
  d.setDate(d.getDate()-1)
  return d.getDate()
}
getMonthLength("2018-02-24");

比较好的 做法是   new Date(year,month,0).getDate() 

//使用 new Date() 创建时间对象时,如果 date 传入 0,就能直接通过 getDate() 获取到最后一天的日期
new Date(2018,2,0).getDate()
原文地址:https://www.cnblogs.com/zuobaiquan01/p/8414177.html