Describe the bug
Using the format string "YYYY-MM-DD HH:mm:ss ZZ", parsing certain strings returns Invalid Date when it should return a date:
var format = "YYYY-MM-DD HH:mm:ss ZZ";
var ok = dayjs("2018-03-01 00:01:00 +0000", format, true);
var bad = dayjs("2018-04-01 00:01:00 +0000", format, true);
where bad is:
{
"$D": 1
"$H": 1
"$L": "en"
"$M": 3
"$W": 0
"$d": Invalid Date
"$m": 1
"$ms": 0
"$s": 0
"$u": undefined
"$y": 2018
}
The parsing is successful if strict mode is not used. The problem seems to be in the customParseFormat.js line:
if (isStrict && date !== this.format(format)) {
where the date that the plugin has parsed is not matching the default output from dayjs.format(). In the above case:
"2018-04-01 00:01:00 +0000" !== "2018-04-01 01:01:00 +0100"
but the same bug will effect parsing any date where the timezone doesn't match whatever local timezone/dst dayjs uses. eg. "2018-03-01 00:01:00 +0600", "2018-04-01 00:01:00 -0200", etc.
Expected behavior
bad should be a valid date object.
Information
We have the same problem. I created this codesandbox example to reproduce the issue
R.I.P 馃憣
I've looked into the code and so far I see only two options for how this bug could be fixed:
Bug confirmed. Strict mode does not work good with parsing timezone (ZZ)
I'm looking for a way to solve it.
I am trying to migrate some code from moment to dayjs, and this strict check is a big problem for me :(, any idea how to solve it?
Most helpful comment
Bug confirmed. Strict mode does not work good with parsing timezone (ZZ)
I'm looking for a way to solve it.