0

タスクの期日をm/d/y形式で表示しています。タスクが投稿された日を「投稿されたX$name(s)前」に表示しています(例:「6日前に投稿されました」)。

今日から期日までの日数に応じて、タイムスタンプ(投稿日と期日)に異なるCSSクラスを与えるように取り組んでいます。(したがって、「投稿されたX」のタイムスタンプはあまり関連性がないので、より良い画像を提供したかっただけです。)

これまでのところ、私は以下を持っています:

$cdate = $this->data['due'];
$today = time();
$dovi = date('m/d/Y', $today);
$difference = $cdate - $dovi;
$upcoming= floor($difference/60/60/24);

$ cdateは、m / d/y形式でDBから期日を取得しています。$ todayは、今日が何であるかを示しています(UNIXタイムスタンプを使用)。$ doviはtime()をm / d/y形式に変換しています。$ Differenceは、今日と期日の違いを示しています。$ upcomingは、理論的には、その違いを考慮して、単純な数値にまとめる必要があります。

計算を機能させるには、$ cdateをUNIXタイムスタンプに変換するか、$todayと$cdateの両方をm/ d/y以外の一致する形式に変換する必要があると思います。

誰かがこれを機能させるための最良の方法についての提案がありますか?私はすでにCSSの変更を実行するためのいくつかのコードを持っています、私が立ち往生している唯一のことは、今(time())から何日が期日であるかを決定するこの変換/計算の問題です。ありがとう!!

4

3 に答える 3

3

多分このようなもの?$ this->data['due']がm/d/Y形式であると仮定します。

$this->data['due'] = '7/28/2012';
$diff = strtotime($this->data['due']) - strtotime(date('m/d/Y'));
var_dump(date('d',$diff)); // 3

phpのdate関数に任意の有効なパラメーターを渡して、必要に応じてフォーマットすることができます。

于 2012-07-25T19:36:38.877 に答える
0

その長いものですが、動作します...

    $datetime = new DateTime("2012-07-22 02:03:50");   // your date in datetime type
    $curr_stamp = time();
    $act_stamp = mktime($datetime->format('H'), $datetime->format('i'), $datetime->format('s'), $datetime->format('n'), $datetime->format('j'), $datetime->format('Y'));

    $diff=$curr_stamp-$act_stamp;
    $day_diff = floor($diff / 86400);

    if($day_diff < 7)
        echo $day_diff." days ago";
于 2012-07-25T19:45:30.520 に答える
0

むしろエレガントで適切なソリューション(そしてUNIXエポックの終了後も実行可能)。

$today = new DateTime(); // creating `today` DateTime object
$expiry = DateTime::createFromFormat('m/d/Y', $this->data['due']) // creating DateTime object from already formatted date

$difference = $today->diff($expiry); // 1st variant to calculate difference between dates
$difference = date_diff($today, $expiry); // and 2nd variant

echo $difference->format('Interval (difference) is %R% days');

UNIXエポックtimestamp)は「すぐに」終了し、タイムスタンプに基づくコードはいくつかの問題に直面する可能性があることを忘れないでください(これを回避するための解決策が将来見つかるかもしれませんが...)、DateTimeclass、becを使用することをお勧めします。1970年より前に生まれた人の年数を計算することでさえ、日付1970.01.01を覚えておらず、タイムスタンプを使用して計算しようとすると、ちょっと問題になる可能性があります(これはデータベースの慣習として広く使われています:))。

非常に古い日付では絶対に実行せず(タイムスタンプ)、将来を見据えてDateTimeSaveOurSoulsを実行します。

于 2012-07-25T22:24:02.803 に答える