【问题标题】:Convert string YYMMDD to YYYYMMDD in JavaScript在 JavaScript 中将字符串 YYMMDD 转换为 YYYYMMDD
【发布时间】:2017-05-09 09:50:04
【问题描述】:

我只是想知道是否可以在 JavaScript 中将日期字符串 YYMMDD 转换为 YYYY-MM-DD,例如 990102 -> 1999-01-02

从评论中编辑:

如果提供日期200102,则需要输出2012-01-02,而不是1920-01-02

【问题讨论】:

  • 除非您提供有关何时使用 2000+ 和何时使用 1900+ 的条件,否则您不能。它在YY 中的信息基本上较少,其中成千上万的信息丢失了。没有明显的方法可以确定142014 还是1914
  • 所以你可以像[1949 - 2050]这样的窗口。所以如果YY>=49 使用1900+。如果YY<50 使用2000+ 可以根据您的要求调整窗口
  • 一般情况下,YY大于一个值就是1900,否则就是2000。这个值不是常数,取决于日期本身。
  • 是的,value 应该根据用例确定。
  • 你不是说'如果提供日期 120102,它需要输出 2012-01-02,而不是 1920-01-02'?我不认为你需要超出范围 [1970:2038] 的东西,最后两个数字现在是唯一的。

标签: javascript string date


【解决方案1】:

我知道这是一个老问题,但这是我的解决方案(在打字稿中,它对我有用)

private convertDate(yymmdd: string) {

    const date: Date = new Date();
    const year = date.getFullYear().toString();

    const d = yymmdd; // YYMMDD
    const yy = d.substr(0, 2);
    const mm = d.substr(2, 2);
    const dd = d.substr(4, 2);
    const yyyy = (+yy < parseInt(year.slice(2, year.length), 10) + 10) ? '20' + yy : '19' + yy;

    return `${yyyy}-${mm}-${dd}`;
}

这是对上述答案的改编,除了它确保差距与当年保持增量 (10) 距离以确保可持续性

【讨论】:

    【解决方案2】:

    除非您提供有关何时使用 2000+ 和何时使用 1900+ 的条件,否则您不能。它在YY中的信息基本上较少,缺少成千上万的信息。没有明显的方法可以确定 14 是 2014 年还是 1914 年

    所以你可以像[1990 - 2089]这样的窗口。所以如果YY&gt;=90 使用1900+。如果YY&lt;90 使用 2000+ 窗口可以根据您的要求进行调整

    我不确定使用哪个窗口是否有任何标准

    @Kos 说:

    有一个POSIX standard:“如果没有另外指定一个世纪, [69,99] 范围内的值应指 1969 年至 1999 年 包括在内,[00,68] 范围内的值应指 2000 年 到 2068 年包括在内”

    @RobG

    ECMA-262(可能更适合 javascript)说 从 0 到 99 的任何年份都应视为 1900 到 1999 (§20.3.2.1)。 但是当然实现可以为格式做他们想要的,而不是 规范涵盖。在 Safari 中,1/1/49 是 2049,1/1/50 是 1950。

    //990102 -> 1999-01-02
    //using window [1990-2089]
    function convertDate(yymmdd) {
      var d = yymmdd; // YYMMDD
      var yy = d.substr(0, 2);
      var mm = d.substr(2, 2);
      var dd = d.substr(4, 2);
      var yyyy = (+yy < 90) ? '20' + yy : '19' + yy;
      return yyyy + '-' + mm + '-' + dd;
    }
    console.log(convertDate('900102'))
    console.log(convertDate('140102'))
    console.log(convertDate('890102'))

    【讨论】:

    • a POSIX standard:“当世纪没有另外指定时,[69,99]范围内的值应指1969年至1999年,包括[00,68]范围内的值指 2000 年至 2068 年(含)”
    • ECMA-262(这可能更适合于 javascript)表示从 0 到 99 的任何年份都应该被视为 1900 到 1999 (§20.3.2.1)。但当然,实现可以为规范未涵盖的格式做他们想做的事。在 Safari 中,1/1/49 是 2049,1/1/50 是 1950。
    【解决方案3】:

    您可以使用substring 方法。

    var date="990102";
    console.log("19"+date.substring(0,2)+"-"+date.substring(2,4)+"-"+date.substring(4,6));

    【讨论】:

    • 这个支持2000+吗?
    • @Alexandru-Ionut Mihai,谢谢。但就我而言,它不起作用,我以 990102 为例。如果日期为 200102,则代码不会返回 2012-01-02,它将返回 1920-01-02
    • 仅凭您的信息无法获取此信息。我需要更多信息。
    • 为什么200102返回2012
    • 一般情况下,YY大于一个值就是1900,否则就是2000。这个值不是常数,取决于日期本身。添加功能并不难,无需为此更新此答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多