0

mysqlクエリから取得した「14/11/20124:26:10PM」の形式の日付があります。

PHPの経験はあまりありませんが、日付「Then」と「Now」の間の単純な期間を計算するにはどうすればよいですか?

そして、それを人間が読める文字列にフォーマットしますか?たとえば...「1時間5分前」。

解決策を探してみましたが、うまくいったと思ったのですが、AM / PMが考慮されていなかったため、タイムスタンプに変換すると問題が発生しました。誰かが何か考えを持っていますか?

これは私がやろうとしていることですが、これはあまりうまくいきません:

$time = $row["NotificationSent"];           
            list($day, $month, $year, $hour, $minute) = split('[/ :]', $time); 
            $timestamp = mktime($hour, $minute,0, $month, $day, $year);         
            $j = TimeSince($timestamp);

私が使用しているグーグルから見つけたtimesince関数は次のとおりです。

    function TimeSince($original) // $original should be the original date and time in Unix format
    {
        // Common time periods as an array of arrays
        $periods = array(
            array(60 * 60 * 24 * 365 , 'year'),
            array(60 * 60 * 24 * 30 , 'month'),
            array(60 * 60 * 24 * 7, 'week'),
            array(60 * 60 * 24 , 'day'),
            array(60 * 60 , 'hour'),
            array(60 , 'minute'),
            );

        $today = time();
        $since = $today - $original; // Find the difference of time between now and the past

        // Loop around the periods, starting with the biggest
        for ($i = 0, $j = count($periods); $i < $j; $i++)
        {
            $seconds = $periods[$i][0];
            $name = $periods[$i][1];

            // Find the biggest whole period
            if (($count = floor($since / $seconds)) != 0)
            {
                break;
            }
        }

        $output = ($count == 1) ? '1 '.$name : "$count {$name}s";

        if ($i + 1 < $j)
        {
            // Retrieving the second relevant period
            $seconds2 = $periods[$i + 1][0];
            $name2 = $periods[$i + 1][1];

            // Only show it if it's greater than 0
            if (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0)
            {
                $output .= ($count2 == 1) ? ', 1 '.$name2 : ", $count2 {$name2}s";
            }
        }
        return $output;
    }

返された結果は、私が探しているものにフォーマットされていますが、間違った数値を示しています。「19/11/20122:48:53PM」は「1日5時間」を返しますが、「17時間32分」である必要があります

どんな助けでも大歓迎です。

4

2 に答える 2

4

ほら、それがDateTimeオブジェクトが助けになるところです:

<?php

$time = DateTime::createFromFormat("d/m/Y g:i:s A", "14/11/2012 4:26:10 PM");;
$now = new DateTime;

$diff = $time->diff($now);
var_dump($diff);

違いを正確に取得し、好きな方法でフォーマットできます。

于 2012-11-19T22:30:55.200 に答える
1

人間が読める形式のタイムスタンプがある場合は、これを使用strtotime()してUNIXタイムスタンプに変換できます。

http://php.net/manual/en/function.strtotime.php

次にtime()、その値から減算して、過去の時間を秒単位で取得します。

于 2012-11-19T22:29:33.093 に答える