これはあなたの質問に完全には答えていないかもしれませんが、サンプルの日付でdate_parse()
の結果を調べると、文字列の最初の文字がタイムゾーンと解釈され、残りの文字列も警告またはエラーが"Double timezone specification"
であり、エラーの場合はDateTime
を作成できません。例えば
:
date_parse("1920-09-12d")
Array
(
[year] => 1920
[month] => 9
[day] => 12
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 2
[zone] => -240
[is_dst] =>
[tz_abbr] => D
)
注意タイムゾーン "D"
date_parse("1920-09n-12")
Array
(
[year] => 1920
[month] => 9
[day] => 1
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 1
[warnings] => Array
(
[8] => Double timezone specification
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 2
[zone] => 60
[is_dst] =>
[tz_abbr] => N
)
さらに、タイムゾーン "N"に注意してください。さらに、12は月の日として解釈されませんが、 "-12"は追加のタイムゾーンの指定として解釈されると思われます。
date_parse("1920r-09-12")
Array
(
[year] =>
[month] =>
[day] =>
[hour] => 19
[minute] => 20
[second] => 0
[fraction] =>
[warning_count] => 1
[warnings] => Array
(
[5] => Double timezone specification
)
[error_count] => 1
[errors] => Array
(
[8] => Double timezone specification
)
[is_localtime] => 1
[zone_type] => 2
[zone] => 300
[is_dst] =>
[tz_abbr] => R
)
注意タイムゾーン "R"、さらに何日が解析されていない、むしろ1920
は時間19:20:00
として解釈され、そしてIは、文字列の残りの部分がある疑い2つのタイムゾーンとして解釈され、 "-09" & "-12"となり、 "Double timezone specification"というエラーが発生します。
laravelに含まれている 'Carbon'クラスを試しましたか? –
はい私はCarbonを使用しますが、フレームワークの検証ルールを変更することはできません。 とにかく、問題はフレームワークではなくstrtotimeにあります。 私はちょうどプロジェクトで私の問題を解決しましたが、私はstrtotimeが期待された動作をしていない理由を知りたいです。 –