2

これは私のコードです。日付オブジェクトと時間オブジェクトを追加しています。しかし、答えは間違った値を返しています。それ以外の場合はどうすればよいですか?

$time_obj           = mktime(23, 20, 10);
$date_obj           = mktime(0, 0, 0, 07, 09, 2013);
$new_date                   = $time_obj+$date_obj;
$date_str           = date('Y-m-d H:i:s', $new_date);
echo($date_str);

$date_str は正しくない値です。どうすればこれを克服できますか?

4

4 に答える 4

3

日付を追加する問題に対する良い解決策の 1 つは、すばらしいDateTimeクラスを使用することです。

$date = new DateTime('2013-07-09');
$time = new DateInterval('P23H20M10S');
$date->add($time);

echo $date->format('Y-m-d H:i:s');

これには、期間 (この場合は時間など) の概念を絶対日付から切り離す効果があります。あなたが行っていたことは、本質的に 2 つの絶対的な日付を一緒に追加することであり、必然的に混乱を招く結果になりました。

于 2013-07-09T10:06:02.580 に答える
0

mktimeこれは、「エポック」 (1970-01-01、00:00:00 UTC) からの秒数であるタイムスタンプを常に返すためです。

mktime(23, 20, 10);「23 時間 20 分 10 秒」の秒数を返しません。エポックと今日の日付23:20:10 の間の秒数を返します。

次のようにしてこれを克服できます。

...
$time_obj = 23*3600 + 20*60 + 10;
...
于 2013-07-09T09:54:57.973 に答える
0

タイムスタンプを「時間のみ」にする方法はありません。日付と時刻が常に含まれます。

タイムスタンプは常に、1970 年 1 月 1 日からの秒数です。

したがって、mktime()は常に完全なタイムスタンプを返します。で省略したパラメーター

mktime(23, 20, 10);

自動的に現在の日付に置き換えられるため、内部的には次のようになります。

mktime(23, 20, 10, 6, 7, 2013);
于 2013-07-09T09:55:44.483 に答える