如何防止JS日期神奇地添加一个不存在的日期和月份

How to prevent JS Date from magically adding a non-existent day and month?

本文关键字:日期 不存在 一个 JS 何防止 神奇 添加      更新时间:2023-09-26

我使用moment.js和JavaScript Date构造函数来自动解析一组日期,其格式可以是任何格式。

考虑以下代码:

var dateString = "June 2013";
var dateObj    = new Date(dateString);
console.log(dateObj); // Sat Jun 01 2013 00:00:00 GMT+0100 (BST)

我们可以看到,该行为是将日期设置为1号(如果没有指定,则与月份类似)。

我理解这种行为,但是当我查询Date对象并请求日期时,它将返回一个最初没有指定的日期。

除了在原始字符串上做一堆正则表达式处理之外,还有其他方法可以解决这个问题吗?

谢谢!

当我查询Date对象并请求日期时,它将返回一个最初没有指定的日期。

使用一个变量来存储字符串,然后在这些实例上使用defineProperty来覆盖getDate回调:

    var dateString = "June 2013";
    var foo = new Date(dateString);
    if (dateString.match(/'s[0-31]'s/) === null)
      {
      Object.defineProperty(foo, 'getDate', {value: function(){return null} });
      }
    console.log(foo.getDate() );

引用

  • Object.defineProperty() - JavaScript | MDN

  • Date.prototype.getDate() - JavaScript | MDN