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()