2016-06-29 4 views
-1

私のコードは次のようである:日付時刻から経過した時間を見つける方法と通知のFacebookのような時は何ですか?

<?php 
    function time_elapsed_string($datetime, $full = false) { 
     $now = new DateTime; 
     $ago = new DateTime($datetime); 
     $diff = $now->diff($ago); 

     $diff->w = floor($diff->d/7); 
     $diff->d -= $diff->w * 7; 

     $string = array(
      'y' => 'year', 
      'm' => 'month', 
      'w' => 'week', 
      'd' => 'day', 
      'h' => 'hour', 
      'i' => 'minute', 
      's' => 'second', 
     ); 
     foreach ($string as $k => &$v) { 
      if ($diff->$k) { 
       $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); 
      } else { 
       unset($string[$k]); 
      } 
     } 

     if (!$full) $string = array_slice($string, 0, 1); 
     return $string ? implode(', ', $string) . ' ago' : 'just now'; 
    } 

    $created_date = '2016-06-28 23:30:00'; 

    echo time_elapsed_string($created_date); 
?> 

私はdatetime型のようにしたい通知ログインfacebookで

それはこのようなものです:7時11時45

6月26日昨日:00

12分前

私はそのようにしたい

私の問題を解決するための解決策はありますか?

+1

あなたの問題は何ですか? –

+0

@Arsh Singh、私はまだfacebookのdatetimeのようなdatetimeを表示するのに苦労しています –

+0

あなたのフォーマットに従って完全な日付を返す関数を呼び出すことができます!空($ string ['y'])|| $ string ['m'] || !empty($ string ['w'])。 $ string ['d'] <2に 'yesterday'というテキストが表示されたら –

答えて

1

私はあなたの機能を更新しました。必要な検証を追加してください

function time_elapsed_string($datetime, $full = false) { 
     $now = new DateTime(); 

     $ago = new DateTime($datetime); 
     $diff = $now->diff($ago); 

     $diff->w = floor($diff->d/7); 
     $diff->d -= $diff->w * 7; 

     $string = array(
      'y' => 'year', 
      'm' => 'month', 
      'w' => 'week', 
      'd' => 'day', 
      'h' => 'hour', 
      'i' => 'minute', 
      's' => 'second', 
     ); 
     foreach ($string as $k => &$v) { 
      if ($diff->$k) { 
       $v = $diff->$k ;//. ' ' . $v . ($diff->$k > 1 ? 's' : ''); 

      } else { 
       unset($string[$k]); 
      } 
     } 

     if (!$full) $string = array_slice($string, 0, 1); 

    if(!empty($string['y']) || !empty($string['m']) || !empty($string['w'])) 
     { 
      echo showdate($datetime,'w')."<br>"; 
     } 
    elseif(!empty($string['d'])) 
     { 
      if($string['d'] > 1) 
      { 
       echo showdate($datetime,'w')."<br>"; 
      } 
      else 
      { 
       echo showdate($datetime,'d')."<br>"; 
      } 
     } 
    elseif(!empty($string['h'])) 
     { 
     echo implode(', ', $string) . 'h ago';//"<br>"; 
     } 
     elseif(!empty($string['i']) ) 
     { 
      echo implode(', ', $string) . 'mints ago';//"<br>"; 
     } 
     elseif(!empty($string['s'])) 
     { 
     echo 'just now';//"<br>"; 
     } 
    // return $string ? implode(', ', $string) . ' ago' : 'just now'; 
    } 


function showdate($dt,$type) 
{ 
    $mydt = new DateTime($dt); 
    if($type == 'd') 
    { 
     $str = 'Yesterday at '.$mydt->format('H:i:s '); 
    } 
    elseif($type == 'h') 
    { 
     //$str = 'Yesterday at '.$mydt->format('H:i:s '); 
    } 
    else 
    { 
     $str = $mydt->format('M d'); 
     $str .= ' at '.$mydt->format('H:i:s '); 
    } 

    return $str; 
} 
    $created_date = '2016-06-29 04:50:00'; 

    echo time_elapsed_string($created_date); 
+0

私はそれを試しました。結果は一致しません –

+0

私はこのように変わります: '$ created_date = '2016-06-25 14:10:00';'、結果:昨日の14:10:00。それは間違っている –

+0

私の更新された機能を確認してください –

関連する問題