【问题标题】:Converting (formatting) 2-digit date to a 4-digit date将 2 位日期转换(格式化)为 4 位日期
【发布时间】:2013-01-31 16:33:02
【问题描述】:

我无法将 2 位日期正确格式化为 4 位日期。

我有一个文本输入字段:

<input type="text" value="" class="date"/>

然后我想在用户输入日期后将其格式化为“mm/dd/yyyy”格式。所以我有一个 onChange 事件:

$('.date').on('change',function(){
    var date = new Date($(this).val());
    $(this).val((date.getMonth()+1)+'/'+date.getDate()+'/'+date.getFullYear());
});

好的,现在奇怪的事情来了(我将使用 12/12/12 作为示例日期):

1) getFullYear() 在所有 IE、FF 中返回 1912。 Chrome 2012 年回归。

2) getYear() 在 IE、Chrome 中返回 112。 FF 返回 12。

因此,此时似乎唯一的选择是嗅探用户代理,并相应地使用它。有没有嗅探UA?

【问题讨论】:

  • 你可能想看看这个帖子 stackoverflow.com/questions/2997785/… - JavaScript 不适合约会。
  • 如果我在日期字段中输入“04/19/10”之类的内容,你怎么知道我说的是 1910 年还是 2010 年?
  • 您的输入应该需要全年。
  • @BrianHoover 是的,除此之外,但我的客户希望在日期进行 JS 验证/更正:-S
  • @kinsho 对于这个应用程序,我们假设它是 20XX,因为我们收集的数据应该只发生在 20XX。

标签: javascript jquery


【解决方案1】:

使用moment.js

const moment = require("moment")
const date = moment("21", "YY")
const year = date.format("YYYY")

【讨论】:

    【解决方案2】:

    您可以先尝试分离输入的各个部分

    ...
    var input=$(this).val();
    var month=input.substr(0,2)-1;
    var day=input.substr(3,2);
    var year=parseInt("20"+ input.substr(6,2));
    

    然后初始化一个新的Date对象:

    var date= new Date(year,month,day);
    

    或将其写回字段,就像您所做的那样:

    $(this).val((date.getMonth()+1)+'/'+date.getDate()+'/'+date.getFullYear());
    

    【讨论】:

    • 很有趣,但是如果我输入“1992”作为年份,会失败的一个测试。在您的代码中,它会返回不正确的“2092”,因此您必须先测试提供的年份长度。
    • 没有争议,还有很多其他的测试你应该检查,比如有没有字母/空格,这个日期是否有效(34/70/09 无效)等等……
    • 一般来说,我建议您实现其他东西,例如 jquery-ui datepicker(或其他插件),而不是重新发明轮子。我试图专注于你的问题。我的假设是,当您将年份强制为 2 位数时,它必须高于 1999 年。
    • @yoav_barnea 我实际上在输入上有一个日期选择器,但客户也希望能够手动输入日期,是的......
    【解决方案3】:

    四处询问后,我最终使用了Moment.js。我试过date.js,但因为我部分使用unix时间戳,所以moment似乎可以更好地处理这些(IMO)。

    【讨论】:

      【解决方案4】:

      const [日、月、年] = values.date.split('/');

      【讨论】:

      • 请解释为什么这个答案可以解决您的问题。
      猜你喜欢
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2011-08-13
      • 2023-01-24
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多