PHP: date “Yesterday”, “Today”

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I have a little function that shows latest activity, it grab timestamp in unix format from the db, and then it echo out with this line:

 date("G:i:s j M -Y", $last_access) 

Now i would like to replace the date (j M -Y) to Yesterday, and Today if the latest activity was within today, and same goes with Yesterday.

How can i do this?

回答1:

function get_day_name($timestamp) {      $date = date('d/m/Y', $timestamp);      if($date == date('d/m/Y')) {       $date = 'Today';     }      else if($date == date('d/m/Y',now() - (24 * 60 * 60))) {       $date = 'Yesterday';     }     return $date; } print date('G:i:s', $last_access).' '.get_day_name($last_access); 


回答2:

I would find the timestap for last midnight and the one before it, if $last_access is between the two timestamps, then display yesterday, anything greater than last midnight's timestamp would be today...

I believe that would be the quicker than doing date arithmetic.

Actually, I just tested this code and it seems to work great:

= strtotime("today"))         echo "Today";     else if ($last_access >= strtotime("yesterday"))         echo "Yesterday"; ?> 


回答3:

You have to compare day with day, secondes comparaison are totally wrong :

If we are today morning, that means yesterday night is today (by minus 24h) ^^

Here a method I use for Kinoulink ( a french startup ) :

public function formatDateAgo($value) {     $time = strtotime($value);     $d = new \DateTime($value);      $weekDays = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'];     $months = ['Janvier', 'Février', 'Mars', 'Avril',' Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];      if ($time > strtotime('-2 minutes'))     {         return 'Il y a quelques secondes';     }     elseif ($time > strtotime('-30 minutes'))     {         return 'Il y a ' . floor((strtotime('now') - $time)/60) . ' min';     }     elseif ($time > strtotime('today'))     {         return $d->format('G:i');     }     elseif ($time > strtotime('yesterday'))     {         return 'Hier, ' . $d->format('G:i');     }     elseif ($time > strtotime('this week'))     {         return $weekDays[$d->format('N') - 1] . ', ' . $d->format('G:i');     }     else     {         return $d->format('j') . ' ' . $months[$d->format('n') - 1] . ', ' . $d->format('G:i');     } } 


回答4:

If you are going down the road as suggested above, with unix timestamps for today / yesterday, have a look at strtotime, one of the greatest inventions of the 20th (or 21st?) century:

echo strtotime("yesterday"); // midnight 1281391200  echo strtotime("today"); // midnight 1281477600  echo strtotime("today, 1:30"); 1281483000 


回答5:

something like:  $now = time();  $last_midnight = $now - ($now % (24*60*60));  if ($last_access >= $last_midnight) {  print "Today"; }     elseif ($last_access >= ($last_midnight-(24*60*60)) {  Print "Yesterday"; } 


回答6:

here's working function

    function minus_one_day($date){       $date2 = formatDate4db($date);       $date1 = str_replace('-', '/', $date2);       $yesterday = date('Y-m-d',strtotime($date1 . "-1 days"));       return $yesterday; } 

hope work for you...



回答7:

I enhanced Thomas Decaux answer to come up with this

function formatTimeString($timeStamp) { $str_time = date("Y-m-d H:i:sP", $timeStamp); $time = strtotime($str_time); $d = new DateTime($str_time);  $weekDays = ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']; $months = ['Jan', 'Feb', 'Mar', 'Apr', ' May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];  if ($time > strtotime('-2 minutes')) {   return 'Just now'; } elseif ($time > strtotime('-59 minutes')) {   $min_diff = floor((strtotime('now') - $time) / 60);   return $min_diff . ' min' . (($min_diff != 1) ? "s" : "") . ' ago'; } elseif ($time > strtotime('-23 hours')) {   $hour_diff = floor((strtotime('now') - $time) / (60 * 60));   return $hour_diff . ' hour' . (($hour_diff != 1) ? "s" : "") . ' ago'; } elseif ($time > strtotime('today')) {   return $d->format('G:i'); } elseif ($time > strtotime('yesterday')) {   return 'Yesterday at ' . $d->format('G:i'); } elseif ($time > strtotime('this week')) {   return $weekDays[$d->format('N') - 1] . ' at ' . $d->format('G:i'); } else {   return $d->format('j') . ' ' . $months[$d->format('n') - 1] .   (($d->format('Y') != date("Y")) ? $d->format(' Y') : "") .   ' at ' . $d->format('G:i'); } 

}

It takes in the time stamp as the argument, it adds the year of the time if it was from a different year, etc...



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!