JS如何从'2020-10-20'类日期字符串中分别提取年、月、日数值?
正则填写方案
你给出的写法里只要补充带捕获组的正则,同时注意match返回的数组第一个元素是完整匹配结果,解构时跳过第一个位置即可:
const [, year, month, day] = '2020-10-20'.match(/^(\d{4})-(\d{2})-(\d{2})$/)
正则各部分说明:
^、$分别匹配字符串开头和结尾,避免脏数据混入- 每一对括号为一个捕获组,按顺序对应年、月、日的匹配结果
\d{n}表示匹配n位数字,比重复写\d更简洁
更优实现方案
分场景给你几个更简单的选择:
- 固定短横线分隔格式、不需要做格式校验时,直接用
split拆分,性能更高写法更简单:
// 得到字符串类型的年月日 const [year, month, day] = '2020-10-20'.split('-') // 如果需要数值类型,直接做批量转换即可 const [yearNum, monthNum, dayNum] = '2020-10-20'.split('-').map(Number)
- 需要同时校验日期合法性时,用Date对象内置方法更稳妥:
const date = new Date('2020-10-20') const year = date.getFullYear() // getMonth返回值范围是0~11,需要加1,不足两位补前导0 const month = String(date.getMonth() + 1).padStart(2, '0') const day = String(date.getDate()).padStart(2, '0')
这种写法会自动处理非法日期输入,比如输入2020-13-01会自动识别为2021年1月,不需要自己额外写校验逻辑。
内容的提问来源于stack exchange,提问作者ADV
相关产品推荐
相关产品推荐

