javascript - JS : new Date() is not accepting date string in my own locale (d/m/y)

标签 javascript locale date

我的浏览器(即我的操作系统)应该知道我在澳大利亚以及正确的日期格式是什么。在这种情况下,d/m/y,而不是 m/d/y。但是,如果我运行以下代码:

alert(new Date("21/11/1968"))

结果是“1969 年 9 月 11 日星期四”。它认为月份在前,并相应地进行调整。

这是为什么?答案是始终使用通用格式作为日期函数的输入,还是有办法告诉浏览器期望以我的语言环境格式输入日期?

最佳答案

将日期字符串转换为可提供预期结果的格式(“yyyy/mm/dd”或“yyyy-mm-dd”)非常简单:

new Date("21/11/1968".split('/').reverse().join('/'));

[编辑] 您可能会喜欢这种更通用的方法(npm PureHelpers library 的一部分):

document.querySelector("#result").textContent = `
  tryParseDate("2017/03/22", "ymd"); // ${tryParseDate("2017/03/22", "ymd")}
  tryParseDate("03/22/2017", "mdy"); // ${tryParseDate("03/22/2017", "mdy")}
  tryParseDate("22-03-2017", "dmy"); // ${tryParseDate("22-03-2017", "dmy")}
`;

function tryParseDate(dateStringCandidateValue, format = "dmy") {

  if (!dateStringCandidateValue) {
      return null;
  }
  
  const mapFormat = format.split("").reduce(function(a, b, i) {
      a[b] = i;
      return a;
  }, {});
  const dateStr2Array = dateStringCandidateValue.split(/[ :\-\/]/g);
  const datePart = dateStr2Array.slice(0, 3);
  const datePartFormatted = [
    +datePart[mapFormat.y], 
    +datePart[mapFormat.m] - 1, 
    +datePart[mapFormat.d]
  ];
  
  if (dateStr2Array.length > 3) {
    dateStr2Array.slice(3).forEach(t => datePartFormatted.push(+t));
  }
  
  const dateTrial = new Date(Date.UTC.apply(null, datePartFormatted));
  return dateTrial && dateTrial.getFullYear() === datePartFormatted[0] &&
          dateTrial.getMonth() === datePartFormatted[1] &&
          dateTrial.getDate() === datePartFormatted[2] 
      ? dateTrial 
      : null;
}
<pre id="result"></pre>

关于javascript - JS : new Date() is not accepting date string in my own locale (d/m/y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165483/

相关文章:

javascript - 使用 Javascript 的 HTML 中两个字段的区别

javascript - Google map 库的延迟加载

php - 在 sql 表的所有行之间进行选择的 Jquery/Ajax 对话框

javascript - 如何使用 JavaScript 获取特定语言环境的日期?

ios - 确定 iOS 区域 "Europe"的国家代码

javascript - 使用 jquery 函数在 html 表中以 dd/mm/yyyy 格式排序日期

java - 获取明天的时间 xx :xx

javascript - 如何显示进度条,直到我收到 POST 调用的 200 状态代码

date - 将包含缺失值的 DataFrame String 列转换为 Julia 中的日期

java - 如何在自定义操作类中设置区域设置并在另一个java类中获取它?