0

1899-12-30 19:00:00.000この関数を使用して、指定された文字列の形式を日付に変換しようとしています:

$startDate = strtotime("1899-12-30 19:00:00.000");

しかし、その結果、間違った日付を取得します。

30.10.2008 00:00:00

私は何を間違っていますか?

4

3 に答える 3

4

使用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(または省略してデフォルトのままにすることもできます)。

于 2012-07-23T13:33:02.183 に答える
3

PHP 5 >= 5.3.0 を使用している場合は、次のようにdate_parse_from_formatDocs関数を使用できます。

$date = "1899-12-30 19:00:00.000";
$dateObj = date_parse_from_format("Y-m-d H:i:s.000",$date);

ソース: php.net

于 2012-07-23T13:33:41.050 に答える
1

日付1899-12-30 19:00:00.000は UNIX タイムスタンプで表されますが-2209096800、これは 32 ビット符号付き整数の範囲外です。64 ビット PHP システムでは動作しますが、32 ビット システムでは問題が発生します。

クラスを使用してそのDateTimeような日付を表すと、それを処理できます。

于 2012-07-23T13:35:32.643 に答える