2

今日は壁に頭をぶつけて日付を扱っています。一連の日時をループし、それらを現在の日付と比較して、それらがどれだけ離れているかを判断しています。

したがって、「tomorow @ 4pm」、「yesterday at 3pm」、「today at 12pm」、「3 days ago」、「in 3 days」などを返します。

今日/明日/昨日頃になるまで、すべて正常に動作します。

Date diff は、これらの日付になると、-0 や +0 などのばかげたものを返します。私の理論では、「翌日」に行われたとしても、23 時間後、または 10 時間後という日付は、1 ではなく 0 として返されます。

残念ながら、date_diff は 10 進数を返すようには見えず、丸めを行うこともできません。

サンプルコードは次のとおりです。

$difference = $meeting_date->diff($current_date);
$difference = $difference->format('%R%a');

次に、この差分整数をチェックして、0、-1、1、< -1、または > 1 であるかどうかを確認します。必要に応じて、前の + 記号を処理します。

-1 または +1 であるはずのものが、-0 または +0 として返されることがあります (..what?)

また、-0 は = 0 ではありませんが、PHP によると明らかに -1 未満です。

SOS、誰か助けて。

関連するすべての質問を読みましたが、これは重複ではなく、ランダムな 6015 エラーとは関係ありません。また、 diff->days を使用することは答えではありません。これは常に絶対値を返し、問題となる負の値ではありません。

4

2 に答える 2

1

うーん...ここでの私のアプローチは、時間と日付の表示を分割することです。このようなもの:

$meeting_day = DateTime::createFromFormat($meeting_date->format('Y-m-d'));

// set $today to today's date at 0:00

$diff = $meeting_day->diff($today);

これにより、使用可能な日ベースの違いが得られます (今日、昨日、明日などをレンダリングするため)。

于 2012-08-28T14:21:48.747 に答える
1

日を比較する代わりに、time()strtotime() を使用してフォーマットできる別の日時と比較してみませんか

時間()

比較対象の日時を変換できますstrtotime()

strtotime()

そして今、秒単位で 2 つの違いを比較し、日、時間などに合わせて割ることができます。

于 2012-08-28T14:23:16.240 に答える