How to do date masking using javascript (without JQuery)?

后端 未结 4 595
太阳男子
太阳男子 2020-12-09 00:26


        
相关标签:
4条回答
  • 2020-12-09 00:57

    Try out this code, this will format your date in mm/dd/yyyy format as you type it in the input box. Create an onchange event on the input box and call the date_formator function with the input date.

    function date_formator(date) {
    
        date = date.replace('//', '/');
        var result = date.split("/");
    
        var length = result.length;
    
        // Append "/" after the last two charas, if more than 2 charas then remove it
        if (length <= 2 && result[length - 1] != "") {
            var last_two_digits = result[length -1];
            if (last_two_digits.length >= 2) {
                date = date.slice(0, -last_two_digits.length);
                date = date + last_two_digits.slice(0,2) + "/";
            }
        }
    
        if (typeof result[2] != "undefined") {
            var year = result[2];
            if (year.length > 4) {
                date = date.slice(0, -year.length);
                year = year.slice(0, 4);
                date = date + year;
            }
        }
        return date;
    }
    
    0 讨论(0)
  • 2020-12-09 00:58

    This works quite well (tried it in console on the jquery mask page)

     if (locale !=='' && locale==='zh_CN') {
              $('#text12').mask('9999年99月99日');
              }
              else {
              $('#text12').mask('99/99/9999');
              }
    

    but if you want the mask format to show up in the input field you need to pass it as placeholder attribute

    $('#text12').attr('placeholder', '9999年99月99日')
    

    hope this helps

    0 讨论(0)
  • 2020-12-09 01:11

    Check out the below code..

    <input
        type="text"
        name="date"
        placeholder="dd/mm/yyyy"
        onkeyup="
            var v = this.value;
            if (v.match(/^\d{2}$/) !== null) {
                this.value = v + '/';
            } else if (v.match(/^\d{2}\/\d{2}$/) !== null) {
                this.value = v + '/';
            }"
        maxlength="10"
    >
    
    <input
        type="text"
        name="date"
        placeholder="mm/dd/yyyy"
        onkeyup="
            var v = this.value;
            if (v.match(/^\d{2}$/) !== null) {
                this.value = v + '/';
            } else if (v.match(/^\d{2}\/\d{2}$/) !== null) {
                this.value = v + '/';
            }"
        maxlength="10"
    >
    <input
        type="text"
        name="date"
        placeholder="yyyy/mm/dd"
        onkeyup="
            var v = this.value;
            if (v.match(/^\d{4}$/) !== null) {
                this.value = v + '/';
            } else if (v.match(/^\d{4}\/\d{2}$/) !== null) {
                this.value = v + '/';
            }"
        maxlength="10"
    >
    <input
        type="text"
        name="date"
        placeholder="yyyy年mm月dd"
        onkeyup="
            var v = this.value;
            if (v.match(/^\d{4}$/) !== null) {
                this.value = v + '年';
            } else if (v.match(/^\d{4}年\d{2}$/) !== null) {
                this.value = v + '月';
            }"
        maxlength="10"
    >

    Hope this is what you are looking for!

    0 讨论(0)
  • 2020-12-09 01:14

    I had some trouble getting the currently accepted answers to work properly while retaining the ability to backspace. This was my solution. It retains backspacing and also doesn't show the slash until the number following it is typed.

    const maskDate = value => {
      let v = value.replace(/\D/g,'').slice(0, 10);
      if (v.length >= 5) {
        return `${v.slice(0,2)}/${v.slice(2,4)}/${v.slice(4)}`;
      }
      else if (v.length >= 3) {
        return `${v.slice(0,2)}/${v.slice(2)}`;
      }
      return v
    }
    

    I've also create a github gist for this snippet here.

    0 讨论(0)
提交回复
热议问题