1

基本的に、私は現在、MySQL データベースからタイムスタンプを選択しています。データベースでは、タイムスタンプは次のようになります。

2010-06-30 12:36:08

明らかに、Web アプリケーションの場合、これはユーザーにとってあまり魅力的ではありません。そこで、いくつかの CodeIgniter 関数を使用して、見栄えを良くしました。

<h4 class="timestamp">
    <?php // Quickly calculate the timespan
    $post_date = mysql_to_unix($row->date);
    $now = time();
    echo timespan($post_date, $now);?> ago
</h4>

CodeIgniter を実行しない場合は、echo timespan(). CodeIgniter は単に「英語」のタイムスパンとしてエコーします。したがって、出力例は次のようになります。

2 Months, 4 Weeks, 5 Hours, 20 Minutes ago

それはそれでいいのですが、もっと見栄えを良くしたいのです... コンマが多すぎて、すべてが少し長すぎます(私は好き嫌いがあります...)。私が欲しいは:

  1. タイムスパンが 1 日未満の場合、出力は次のようになります。7 hours, 33 minutes ago
  2. タイムスパンが 1 週間未満の場合、出力は次のようになります。4 days ago
  3. タイムスパンが 1 か月未満の場合、出力は次のようになります。2 weeks, 6 days ago
  4. タイムスパンが 1 か月以上経過している場合、出力は次のようになります。4 months ago
  5. 最終的にタイムスパンが 1 年を超える場合、出力は次のようになります。Over a year ago

ご覧のとおり、私は現在これを単純化するために CodeIgniter 関数を使用していますが、私が望むことを実行できるネイティブ PHP 関数があれば、それは素晴らしいことです。

ご協力いただきありがとうございます!

ジャック

4

2 に答える 2

6

これは、クライアント側のプレゼンテーション層で行うのが最適です。これがJSソリューションです:

Timeagoは、あいまいなタイムスタンプ (「4 分前」や「約 1 日前」など) の自動更新を簡単にサポートできるようにする jQuery プラグインです。

Timeago は、すべての abbr 要素をclasstimeago と ISO 8601 タイムスタンプで変換しますtitle

<abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>

このようなものに:

<abbr class="timeago" title="July 17, 2008">about a year ago</abbr>

日付を ISO 8601 形式に変換するには、次のようにします。

<?= date("c", $post_date) ?>

例:

このページを開いたのは 1 分以内です。(これは毎分更新されます。それを待ちます。)

このページの最終更新日は 11 日前です。

ライアンは31年前に生まれました。

于 2010-07-02T21:31:32.940 に答える
1
$ts = new DateTime();
$ts->setTimestamp($my_timestamp);
$cur = new DateTime();
$difference = $cur->diff($ts);
if ($difference->format("%a") == 0)
    $out = $difference->format("%h hours %i minutes");
elseif ($difference->format("%a") < 7)
    $out = $difference->format("%a days");
elseif ($difference->format("%m") == 0) {
    $days = $difference->format("%a");
    $out = sprintf("%d weeks %d days", floor($days / 7),
        $days % 7);
}
elseif ($difference->format("%y") == 0)
    $out = $difference->format("%m months");
else
    $out = "over a year";

「1日」のようなものが必要ない場合は、いくつかの調整を行う必要があります.

于 2010-07-02T21:39:55.473 に答える