Javascript 日期因月份格式而异

标签 javascript date

<分区>

在调试我的应用程序时,我发现了一些奇怪的事情:

new Date('2017-5-19')  -> Fri May 19 2017 00:00:00 GMT+0300 (FLE Summer Time)
new Date('2017-05-19') -> Fri May 19 2017 03:00:00 GMT+0300 (FLE Summer Time)

我从字符串中设置日期,如 '2017-5-19',但是当月份数字前有零时,日期与没有零的日期不同。

如何通过 505 输入获得相同的结果?

附注我必须支持严格模式

最佳答案

MDN 所示, 由于实现差异,不鼓励使用 Date 构造函数来解析日期。

但是,如果您真的想这样做,唯一的解决办法是确保您提供的输入是一致的。这将确保(至少在单一环境中)输出是一致的。

让两者都像 2017-5-19 一样工作:

function adjustDateString(str) {
    return str.split('-').map(Number).join('-');
}

console.log(new Date(adjustDateString('2017-5-19')))
console.log(new Date(adjustDateString('2017-05-19')))

让两者都像 2017-05-19 一样工作:

function padTo2Digits(str) {
    return str.length >= 2 ? str : '0' + str;
}

function adjustDateString(str) {
    return str.split('-').map(padTo2Digits).join('-');
}

console.log(new Date(adjustDateString('2017-5-19')))
console.log(new Date(adjustDateString('2017-05-19')))

编辑:但是,正如我上面所指出的,您最好不要在字符串上使用 Date 构造函数。只需将它拆分成它的值并将它们传递给构造函数:

function parseDate(str) {
  var parts = str.split('-').map(Number);

  return new Date(parts[0], parts[1], parts[2]);
}

console.log(parseDate('2017-5-19'));
console.log(parseDate('2017-05-19'));

使用数组解构语法(需要 ES6+):

function parseDate(str) {
  let [year, month, day] = str.split('-').map(Number);

  return new Date(year, month, day);
}

console.log(parseDate('2017-5-19'));
console.log(parseDate('2017-05-19'));

关于Javascript 日期因月份格式而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43492557/

相关文章:

javascript - Moment.js,日期(MM-YYYY)正常比较不正确

javascript - 自定义 Javascript 滚动插件不起作用

php - 这个奇怪的日期值的时间格式是什么

vba - 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

php - 更改过期日期后的值 PHP MYSQL

JavaScript 跨浏览器日期比较?

javascript - 如何计算字符串中的某些字符

javascript - Leaflet顶点点击事件

javascript - 使用 jquery 自定义喜欢计数器

javascript - 如何使用来自 Web 服务的 JSON 数据填充 Angular 中的表?