0

次のスニペットは私のプロジェクトにあります:

/*
//forget it 
$ts = 1319990400;
$y = date("Y",$ts);
$m = date("m", $ts);

var_dump(date("Y-m-d", strtotime("$y-$m")));
*/
date("Y-m-d", strtotime("2013-1"));

戻る

"2013-01-10"

この投稿では、デフォルトの日は月の 1 日であると書かれています。しかし、出力が2011-10-10であることがわかりました!! スニペットをクリーンな PHP スクリプトに移動すると、2011-10-01 が正常に出力されます。

デフォルトの日を設定するのはstrtotimeに関するいくつかのオプションだと思いますか? 私も今日は10日だと思いますが、関係ありますか?

更新:「$y-$m-01」のような完全な日付形式を追加するだけで問題を解決できることはわかっていますが、なぜそれが起こるのか知りたいですか?

更新:それはとても奇妙です。date("Ymd", strtotime("2013-1")) と書くだけで、「2013-01-10」が返されます

update : 回答を更新します。:)

4

3 に答える 3

0

私は何が起こるか知っています。

int strtotime ( string $time [, int $now = time() ] )

私のプロジェクトは PHP 5.2.4 を使用しています。このバージョンでは、strtotime は $now の日をデフォルトの日として設定します。これを確認するために、$now をさまざまな値に設定しました。しかし、strtotime() 変更ログでこれに関する情報を見つけることができません。

ちなみに、clean スクリプトは PHP 5.2.17 を使用しています。

于 2013-01-10T14:46:59.863 に答える
0

最初が必要な場合は、次のようにするだけです。

$ts = 1319990400;
var_dump(date("Y-m-01", $ts));
//string(10) "2011-10-01"
于 2013-01-10T13:03:24.757 に答える
0

また、 PHP >= 5.2 でDateTimeを使用できます。

<?php
$ts = 1319990400;
$dateTime = new DateTime;
$dateTime->setDate(date('Y', $ts), date('n', $ts), 1);
var_dump($dateTime->format('Y-m-d')); // string(10) "2011-10-01"
var_dump($dateTime->getTimestamp()); // int(1317474597)
于 2013-01-10T13:10:42.073 に答える