【问题标题】:Moment date is working in Chrome not working in Firefox时刻日期在 Chrome 中有效,在 Firefox 中无效
【发布时间】:2016-07-12 14:26:46
【问题描述】:

我允许用户在日期字段中手动添加日期。 如果用户输入日期为 1/1/13,我预计结果为 01/01/2013。 这就是我正在使用的。 代码:

moment("1/1/13").format('MM/DD/YYYY')

在 chrome 中它可以正常工作,但在 FF 和 IE 中无法正常工作,它显示 01/01/1913 而不是 01/01/2013。

Fiddle

【问题讨论】:

  • 我允许他们添加 mm/dd/yyyy 和 mm/dd/yy @Hebele

标签: javascript jquery momentjs


【解决方案1】:

您需要使用moment(string, string)moment 提供它正在解析的数据的格式。实际上,如果您查看 Web 控制台,moment 会告诉您:

弃用警告:moment 构造回退到 js Date。这是不鼓励的,将在即将发布的主要版本中删除。更多信息请参考http://momentjs.com/guides/#/warnings/js-date/

所以:

moment("1/1/13", "M/D/YY").format("MM/DD/YYYY");
//             ^^^^^^^^^^----- the format to parse with

...假设日期按月/日/年顺序排列(因为这就是您要输出的内容)。

示例(我稍微更改了日期,以便我们可以区分月份中的天数)

console.log(moment("1/2/13", "M/D/YY").format("MM/DD/YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

在你说过的评论中:

我允许他们添加 mm/dd/yyyy 和 mm/dd/yy 格式。这不适用于 1/1/1999

请参阅上面链接的文档,如果您想在年份中支持可变位数,请使用 YYYY 表示年份:

console.log(moment("1/2/13", "M/D/YYYY").format("MM/DD/YYYY"));
console.log(moment("1/2/1999", "M/D/YYYY").format("MM/DD/YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

【讨论】:

  • 我允许他们添加 mm/dd/yyyy 和 mm/dd/yy 格式。这不适用于 1999 年 1 月 1 日
  • @SrinivasPai 使用单个 Y 作为您的年份标记,它会起作用。这匹配 2 位和 4 位数字年份。或者,您也可以传递格式数组。
  • @MaggiePint:如果您只使用一个 Y,它会将“13”解析为 13 年(不是 2013 年)。
  • @SrinivasPai:我已经更新了答案。在问题中包含此类信息很重要。
  • @t.j.crowder 你是完全正确的。看来我暂时忘记了如何使用自己的库。 :-)
【解决方案2】:

这是因为 Moment.js 在创建新时刻时使用 Date 对象,不幸的是,它在 Firefox 和 Chrome 中的工作方式不同。

要对其进行测试,只需尝试在两个浏览器中创建一个新日期。

new Date('1/1/13');

坦率地说,我很惊讶 Chrome 将其解释为 2013 年。为了安全和跨浏览器兼容,只需写出全年。如果您是从外部来源获取此文件,您应该能够简单地对其进行解析并将其重新格式化为更安全的缩短 ISO 格式,如下所示:

dateString.replace(/^(\d\d?)\/(\d\d?)\/(\d\d{2,4})$/, (day, month, year) => {
  day = day.length === 1 ? '0' + day : day;
  month = month.length === 1 ? '0' + month : month;
  year = year.length === 2 ? '20' + year : year;

  if (year.length === 3) {
    throw new Error('Invalid date format. Year must either be 2 or 4 characters long.);
  }

  return [day, '-', month, '-', year].join('');
};

【讨论】:

    【解决方案3】:

    它在 Chrome 和 Mozilla 中完美运行

    moment(`${day}/${month}/${year}`, "DD/MMM/YYYY").format("MMMM/DD/YYYY");
    //January/01/2021
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2016-02-19
      • 2022-01-23
      • 1970-01-01
      • 2011-12-09
      • 2020-04-04
      • 2011-03-16
      相关资源
      最近更新 更多