1

もっと睡眠が必要かもしれませんが、説明できない strtotime に奇妙な点があります。

日付の英国ローカライズ表記はd/m/Y、外部ソースから CSV 内で取得して MySQL に挿入するものです (形式: Y-m-d)。

もちろん、私が直接目にした問題は、PHP (を使用している場合strtotime) がこれらを間違って変換したことでした。以下は、post- aftervar_dumpを使用したフィールド値の例です。strtotime var_dump

string(10) "13/07/1992" string(19) "1969-12-31 16:00:00" // This one is odd
string(10) "07/09/1992" string(19) "1992-07-09 00:00:00"
string(10) "09/11/1992" string(19) "1992-09-11 00:00:00"

当初私は、PHP が英国の表記法 ( http://www.php.net/manual/en/datetime.formats.date.php ) をサポートしていないためだと考えていました。関数を次のように変更/-ます。

date('Y-m-d H:i:s', strtotime(str_replace('/', '-', $string_time)))

同じ日付が機能します:

string(10) "13/07/1992" string(19) "1992-07-13 00:00:00"
string(10) "07/09/1992" string(19) "1992-09-07 00:00:00"
string(10) "09/11/1992" string(19) "1992-11-09 00:00:00"

実際、私は 200 の日付のテスト セットを持っており、すべてこの-表記法で動作します。

ドキュメントによると、ここでも同じルールが適用されるべきではありませんか?

4

1 に答える 1

0

US 形式ではスラッシュが使用されます。これが慣習であるためです。通常、ダッシュは使用されません。strototime()の動作は非常に単純です。

  • 二桁、スラッシュ、二桁、スラッシュ、四桁?米国形式 (月の次に日)。
  • 二桁、ダッシュ、二桁、ダッシュ、四桁?国際形式 (日、次に月)。

形式のより技術的なリスト (および がstrototime()それらを解釈する方法) については、こちらを参照してください。

DateTime::createFromFormatにも興味があるかもしれません。

于 2012-11-08T11:16:37.187 に答える