我想在输入数字自动格式化日期格式,格式化日期格式为:YYYY-MM-DD

我想写一个组件,在输入数字中比如:201705 自动格式化日期格式,最终日期格式为:2017-05 再次输入06自动格式化2017-05-06

阅读 6.8k
7 个回答

Edit: 对提出的 case 做简单转换:

const date str = '20170523'

const result = new Date()
result.setFullYear(parseInt(str.substr(0, 4)))
result.setMonth(parseInt(str.substr(4, 2)) - 1)
result.setDate(parseInt(str.substr(6, 2)))

// 函数定义见下
getDateFromTimestamp(result.getTime())

一个简单的实现如下:

// 1495517932472 毫秒级时间戳
const date = new Date().getTime()

function formatMonth (num) {
  return [
    '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'
  ][num]
}

function getDateFromTimestamp (ts) {
  const date =  new Date(ts)
  const YYYY = date.getFullYear()
  const MM = formatMonth(date.getMonth())
  const DD = date.getDate()
  return `${YYYY}-${MM}-${DD}`
}

// 2017-05-23
console.log(getDateFromTimestamp(date))
funtion format_num_to_date(num) {
    var str = String(num);
    if (str.length === 8) {
        var date = str.substr(0,4) + '-' + str.substr(4,2) + '-' + str.substr(6);
        return date;
    }
}

format_num_to_date(20170523);
//时间格式化
// var time1 = new Date().Format(“yyyy-MM-dd”);
// var time2 = new Date().Format(“yyyy-MM-dd HH:mm:ss”);
Date.prototype.Format = function (fmt) { //author: meizz 
  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;
}
let yyyymmdd = (date, sep = '-') => {
    return [
        date.getFullYear(),
        date.getMonth()+1,
        date.getDate()
    ].map(d => d.toString())
    .map(d => ('00' + d).slice(d.length >= 4 ? -4 : -2)).join(sep); 
}

clipboard.png

原生<input type="date" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}">不好吗?

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