1899-12-30 19:00:00.000
この関数を使用して、指定された文字列の形式を日付に変換しようとしています:
$startDate = strtotime("1899-12-30 19:00:00.000");
しかし、その結果、間違った日付を取得します。
30.10.2008 00:00:00
私は何を間違っていますか?
1899-12-30 19:00:00.000
この関数を使用して、指定された文字列の形式を日付に変換しようとしています:
$startDate = strtotime("1899-12-30 19:00:00.000");
しかし、その結果、間違った日付を取得します。
30.10.2008 00:00:00
私は何を間違っていますか?
使用DateTime
:
$date = DateTime::createFromFormat( 'Y-m-d H:i:s.u', '1899-12-30 19:00:00.000', new DateTimeZone( 'America/New_York'));
echo $date->getTimestamp() . ' ' . $date->format( 'Y-m-d H:i:s');
1970 年 1 月 1 日より前なので、これは負の値になることに注意してください。上記のコードは次のように出力します。
-2209093200 1899-12-30 19:00:00
コンストラクターで正しいタイムゾーンを設定してくださいDateTimeZone
(または省略してデフォルトのままにすることもできます)。
PHP 5 >= 5.3.0 を使用している場合は、次のようにdate_parse_from_format
Docs関数を使用できます。
$date = "1899-12-30 19:00:00.000";
$dateObj = date_parse_from_format("Y-m-d H:i:s.000",$date);
ソース: php.net
日付1899-12-30 19:00:00.000
は UNIX タイムスタンプで表されますが-2209096800
、これは 32 ビット符号付き整数の範囲外です。64 ビット PHP システムでは動作しますが、32 ビット システムでは問題が発生します。
クラスを使用してそのDateTime
ような日付を表すと、それを処理できます。