1
<tr>
   <td><label>Birthdate</label>
      <input type="text" placeholder="mm/dd/yyyy" name="birthdate" maxlength="10"/>
   </td>
</tr>

好吧,我的代码正在运行,但我希望我的“输入类型文本”像日期一样自动格式化(html 5 输入类型=日期),因为在我的 Servlet 中我将它转换为 Age。问题是,如果我使用“input type=date”转换是错误的,所以我决定使用“input type=text”并且它正在工作。那么是否可以以这种格式“mm/dd/yyyy”自动输入“/”?例如,如果用户输入 2 个字符,“/”将自动输入等。


从生日到年龄的 Servlet

        String birthdate = request.getParameter("birthdate");


        int monthDOB = Integer.parseInt(birthdate.substring(0, 2));
        int dayDOB = Integer.parseInt(birthdate.substring(3, 5));
        int yearDOB = Integer.parseInt(birthdate.substring(6, 10));

        DateFormat dateFormat = new SimpleDateFormat("MM");
        java.util.Date date = new java.util.Date();
        int thisMonth = Integer.parseInt(dateFormat.format(date));

        dateFormat = new SimpleDateFormat("dd");
        date = new java.util.Date();
        int thisDay = Integer.parseInt(dateFormat.format(date));

        dateFormat = new SimpleDateFormat("YYYY");
        date = new java.util.Date();
        int thisYear = Integer.parseInt(dateFormat.format(date));

        int calAge = thisYear - yearDOB;

        if (thisMonth < monthDOB) {
            calAge = calAge - 1; 
        }

        if (thisMonth == monthDOB && thisDay < dayDOB) {
            calAge = calAge - 1;
        }

        String age = Integer.toString(calAge);

更新表格

<tr>
    <td><label for="inputName">Birthdate</label>
       <input type="text" placeholder="mm/dd/yyyy" id="input_date" name="birthdate" maxlength="10"  />
    </td>
</tr>

在源中更新

<script src="../scripts/formatter.js"></script>
<script src="../scripts/formatter.min.js"></script>
<script src="../scripts/jquery.formatter.js"></script>
<script src="../scripts/jquery.formatter.min.js"></script>

添加脚本

<script>
     $('#input_date').formatter({
       'pattern': '{{99}}/{{99}}/{{9999}}',
       'persistent': true
     });
</script>

我也尝试了javascript,但它不工作......

4

4 回答 4

3

我一直在 GitHub 上观看一个名为formatter.js http://firstopinion.github.io/formatter.js/demos.html的格式的项目(并提供反馈以改进它),这可能就是你想要的寻找。

这不会阻止您输入像 5 月 53 日这样的日期......但它会帮助您格式化。

new Formatter(document.getElementById('date-input'), {
  'pattern': '{{99}}/{{99}}/{{9999}}',
  'persistent': true
});

或者

$('#date-input').formatter({
  'pattern': '{{99}}/{{99}}/{{9999}}',
  'persistent': true
});
于 2013-10-31T14:51:04.597 回答
2

我有一个与 jquery-ui datepicker 一起使用的替代方法,没有 formatter.js。它旨在从keyupandchange事件中调用。它添加了零填充。它通过从 dateFormat 字符串构造表达式来处理各种支持的日期格式。我想不出少于三个替换的方法。

// Example: mm/dd/yy or yy-mm-dd
var format = $(".ui-datepicker").datepicker("option", "dateFormat");

var match = new RegExp(format
    .replace(/(\w+)\W(\w+)\W(\w+)/, "^\\s*($1)\\W*($2)?\\W*($3)?([0-9]*).*")
    .replace(/mm|dd/g, "\\d{2}")
    .replace(/yy/g, "\\d{4}"));
var replace = "$1/$2/$3$4"
    .replace(/\//g, format.match(/\W/));

function doFormat(target)
{
    target.value = target.value
        .replace(/(^|\W)(?=\d\W)/g, "$10")   // padding
        .replace(match, replace)             // fields
        .replace(/(\W)+/g, "$1");            // remove repeats
}

https://jsfiddle.net/4msunL6k/

于 2016-02-04T19:29:34.527 回答
1

使用来自 jquery 的 datepicker api 这里是链接Datepicker

这是工作代码

<tr>
   <td><label>Birthdate</label>
      <input type="text" placeholder="mm/dd/yyyy" name="birthdate" id="birthdate" maxlength="10"/>
   </td>
</tr>

<script>
  $(function() {
    $( "#birthdate" ).datepicker();
  });
</script>

编辑

$("input[name='birthdate']:first").keyup(function(e){
    var key=String.fromCharCode(e.keyCode);
    if(!(key>=0&&key<=9))$(this).val($(this).val().substr(0,$(this).val().length-1));
    var value=$(this).val();
    if(value.length==2||value.length==5)$(this).val($(this).val()+'/');
});

这是您可能需要的代码

这是摆弄的代码

于 2013-10-31T14:51:22.683 回答
0

user2897690有正确的想法,但它不接受 Numpad 数字。所以拿了他们的javascript并修改它来工作。

这是我对带有附加功能的代码的解释。

$("input[name='birthdate']:first").keyup(function(e){
    var chars = [48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105];
    var key=chars.indexOf(e.keyCode);
    console.log(key);
    if(key==-1)$(this).val($(this).val().substr(0,$(this).val().length-1));
    var value=$(this).val();
    if(value.length==2||value.length==5)$(this).val($(this).val()+'/');
});
于 2016-11-03T16:19:49.760 回答