0

簡単に言えば、2 秒前、1 日前、2 週間前などです。これを達成するための最適な方法は何ですか?

DB に SQL Server を使用します。これはクエリレベルで行われますか? または、ページの読み込み時に JavaScript を使用しますか?

また、それ自体が頻繁に更新される方法...ユーザーエクスペリエンスのためにクライアント側のすべてのjavascriptであると思いますか、それとも多くのajaxリクエストが再計算されると思いますか?

このタイプのタイムスタンプを再現する最善の方法についてのアドバイスを探しています。

私のサイトにはコメント システムがあり、テーブルにある SQL Date_Created フィールドの値を使用しているだけです。

どうもありがとうございました。

4

4 に答える 4

1

この SQL のみのソリューション ( sqlfiddle demo )を使用できます。

SELECT  ev.*,
        CASE 
            WHEN DATEDIFF(SECOND,ev.EventDate,GETDATE()) BETWEEN 0 AND 59
                THEN CONVERT(VARCHAR(25),DATEDIFF(SECOND,ev.EventDate,GETDATE())) + ' second' + CASE WHEN DATEDIFF(SECOND,ev.EventDate,GETDATE())>1 THEN 's' ELSE '' END
            WHEN DATEDIFF(MINUTE,ev.EventDate,GETDATE()) BETWEEN 0 AND 59
                THEN CONVERT(VARCHAR(25),DATEDIFF(MINUTE,ev.EventDate,GETDATE())) + ' minute' + CASE WHEN DATEDIFF(MINUTE,ev.EventDate,GETDATE())>1 THEN 's' ELSE '' END
            WHEN DATEDIFF(HOUR,ev.EventDate,GETDATE()) BETWEEN 0 AND 24
                THEN CONVERT(VARCHAR(25),DATEDIFF(HOUR,ev.EventDate,GETDATE())) + ' hour' + CASE WHEN DATEDIFF(HOUR,ev.EventDate,GETDATE())>1 THEN 's' ELSE '' END
            ELSE 
                CONVERT(VARCHAR(25),DATEDIFF(DAY,ev.EventDate,GETDATE())) + ' day' + CASE WHEN DATEDIFF(DAY,ev.EventDate,GETDATE())>1 THEN 's' ELSE '' END
        END AS Result
FROM    dbo.MyEvent ev;
GO
/*
EventID EventDate               Result
------- ----------------------- ---------
1       2013-08-12 22:20:03.323 5 seconds
2       2013-08-12 22:16:08.327 4 minutes
3       2013-08-12 19:20:08.327 3 hours
4       2013-08-09 22:20:08.330 3 days
5       2013-08-10 22:20:08.337 2 days
*/
于 2013-08-12T19:21:42.560 に答える
0

ここに、あなたが探していると思われるものへのリンクがあります。

http://snipplr.com/view/37578/

<?php
    function nicetime($date) {
        if(empty($date)) {
            return "No date provided";
        }

        $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
        $lengths = array("60","60","24","7","4.35","12","10");

        $now = time();
        $unix_date = strtotime($date);

        // check validity of date
        if(empty($unix_date)) return "Bad date";

        // is it future date or past date
        if($now > $unix_date) {    
            $difference = $now - $unix_date;
            $tense = "ago";
        }
        else {
            $difference = $unix_date - $now;
            $tense = "from now";
        }

        for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) $difference /= $lengths[$j];

        $difference = round($difference);

        if($difference != 1) $periods[$j].= "s";

        return "$difference $periods[$j] {$tense}";
    }

    /*
    $date = "2009-03-04 17:45";
    $result = nicetime($date); // 2 days ago
    */

?>
于 2013-08-12T19:02:53.837 に答える