javascript Date.parse assumes 31 days in February and all months?

前端 未结 2 792
不知归路
不知归路 2020-12-20 20:46

It seems to me that Date.parse assumes all months have 31 days. Including months with 30 days and including February(which should only ever have 28/29 days).

I check

2条回答
  •  余生分开走
    2020-12-20 21:29

    The implementation differs between browsers. IE, Edge and Chrome will parse strings that doesn't represent actual dates, but Firefox will return NaN for those strings. The safe thing to do is to consider the result from Date.parse as undefined for date strings where the day falls outside the range of the month.

    Browsers that allow parsing of non-existent dates will return a different date. Parsing "2015-04-31" will return the date 2015-05-01. This is the same behaviour as when using new Date(2015, 3, 31), where numbers out of range is allowed and will wrap around into a different month or year. That means that the result is still usable, if you don't mind that some invalid dates turn into other dates in some browsers.

    The standard isn't very clear about what values are valid:

    Illegal values (out-of-bounds as well as syntax errors) in a format string means that the format string is not a valid instance of this format.

    The day component is defined as having a range from 1 to 31:

    DD is the day of the month from 01 to 31.

    However, the format is based on ISO 8601, and that is not a format for parsing strings into dates, that is a format for representing dates as string. Clearly you can't represent a date that doesn't even exist as a string.

提交回复
热议问题