新的Date()从无效的输入字符串产生有效的日期

时间:2019-11-29 11:16:45

标签: javascript

当我在新的Date()中传递“ test 2”字符串时,如何获取实际日期?

我正在尝试是否是日期。

console.log(new Date("test 2"));

4 个答案:

答案 0 :(得分:1)

将字符串传递到new Date与使用Date.parse相同。

当传递非标准日期字符串时,结果与实现有关;浏览器可以执行所需的任何操作,包括猜测。在Chrome上,您输入的内容带有日期,但在Firefox上则没有(返回NaN)。

test不是日期字符串的一部分,因此Chrome似乎只解析2:

console.log(new Date('2'));
console.log(new Date('1'));
console.log(new Date('0'));

本质上,这是未定义的行为,因此奇怪的结果也就不足为奇了。除非传递的字符串符合format defined in the specification(即类似"2011-10-10""2011-10-10T14:48:00""2011-10-10T14:48:00.000+09:00"的字符串,否则结果是不可预测的。

请考虑弄清楚您期望输入哪种字符串格式,然后检查该格式是否带有正则表达式。如果是这样,请传递到new Date,看看它是否给您带来有意义的结果;否则,不要。

答案 1 :(得分:0)

根据MDN

  

ECMAScript规范指出:如果String不符合标准格式,则该函数可能会退回到任何特定于实现的试探法或特定于实现的解析算法。

Google Chrome浏览器尝试解析您的日期,并选择一个月作为数字。其他浏览器可能会拒绝传递的值或返回完全不同的内容。

因此请考虑以下注意事项:

  

由于浏览器的差异和不一致,强烈建议不要使用Date构造函数(和Date.parse(),以相同的方式)对日期字符串进行解析。

MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters

答案 2 :(得分:0)

来自mdn

  

一个字符串,它表示ISO 8601日历日期扩展格式的简化形式(可以使用其他格式,但结果取决于实现方式)。

您遇到了特定于实现的尝试,将您的字符串解析为日期。不建议依赖此行为。

答案 3 :(得分:0)

因为您的测试文字中包含数字。瞧,它正在将1解释为1月,将2解释为2月,将3解释为3月,依此类推。

new Date( "3")

会给你

Thu Mar 01 2001 00:00:00 GMT+0530 (India Standard Time)

如果您使用没有数字的文本,例如new Date("test")将引发无效日期。