예를 들어 PHP에서 1 일 전, 2 일 전에 타임 스탬프를 시간으로 변환하는 중 ...
PHP예를 들어 PHP에서 1 일 전, 2 일 전에 타임 스탬프를 시간으로 변환하는 중 ...
나는 형식 2009-09-12 20:57:19의 타임 스탬프를 변환하려고하고 PHP로 3 분 전에 비슷한 것으로 바꿔 놓았다.
이 작업을 수행하는 데 유용한 스크립트를 발견했지만 시간 변수로 사용할 다른 형식을 찾고 있다고 생각합니다. 이 형식으로 작업하기 위해 수정하고 싶은 스크립트는 다음과 같습니다.
function _ago($tm,$rcs = 0) {
$cur_tm = time();
$dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if($no <> 1)
$pds[$v] .='s';
$x = sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
$x .= time_ago($_tm);
return $x;
}
나는 처음 몇 라인에서 스크립트가 다음과 같이 보이는 것을 시도한다고 생각한다. (다른 날짜 형식 수학) :
$dif = 1252809479 - 2009-09-12 20:57:19;
내 타임 스탬프를 (unix?) 형식으로 변환하는 방법은 무엇입니까?
해결법
-
==============================
1.
echo time_elapsed_string('2013-05-01 00:22:35'); echo time_elapsed_string('@1367367755'); # timestamp input echo time_elapsed_string('2013-05-01 00:22:35', true);
입력은 지원되는 날짜 및 시간 형식 일 수 있습니다.
4 months ago 4 months, 2 weeks, 3 days, 1 hour, 49 minutes, 15 seconds ago
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'; }
-
==============================
2.
function time_elapsed_string($ptime) { $etime = time() - $ptime; if ($etime < 1) { return '0 seconds'; } $a = array( 365 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second' ); $a_plural = array( 'year' => 'years', 'month' => 'months', 'day' => 'days', 'hour' => 'hours', 'minute' => 'minutes', 'second' => 'seconds' ); foreach ($a as $secs => $str) { $d = $etime / $secs; if ($d >= 1) { $r = round($d); return $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ago'; } } }
-
==============================
3.
$time_elapsed = timeAgo($time_ago); //The argument $time_ago is in timestamp (Y-m-d H:i:s)format. //Function definition function timeAgo($time_ago) { $time_ago = strtotime($time_ago); $cur_time = time(); $time_elapsed = $cur_time - $time_ago; $seconds = $time_elapsed ; $minutes = round($time_elapsed / 60 ); $hours = round($time_elapsed / 3600); $days = round($time_elapsed / 86400 ); $weeks = round($time_elapsed / 604800); $months = round($time_elapsed / 2600640 ); $years = round($time_elapsed / 31207680 ); // Seconds if($seconds <= 60){ return "just now"; } //Minutes else if($minutes <=60){ if($minutes==1){ return "one minute ago"; } else{ return "$minutes minutes ago"; } } //Hours else if($hours <=24){ if($hours==1){ return "an hour ago"; }else{ return "$hours hrs ago"; } } //Days else if($days <= 7){ if($days==1){ return "yesterday"; }else{ return "$days days ago"; } } //Weeks else if($weeks <= 4.3){ if($weeks==1){ return "a week ago"; }else{ return "$weeks weeks ago"; } } //Months else if($months <=12){ if($months==1){ return "a month ago"; }else{ return "$months months ago"; } } //Years else{ if($years==1){ return "one year ago"; }else{ return "$years years ago"; } } }
-
==============================
4.
이것은 실제로 내가 찾은 더 나은 해결책입니다. 그러나 그것은 완벽하게 작동하지만 jQuery를 사용합니다. 또한 SO 및 Facebook과 마찬가지로 자동으로 새로 고침되므로 업데이트를 확인하기 위해 페이지를 새로 고칠 필요가 없습니다.
이 플러그인은
e.g. "4 minutes ago" or "about 1 day ago
http://timeago.yarp.com/
-
==============================
5.
왜 아무도 탄소에 대해 언급하지 못했습니다.
https://github.com/briannesbitt/Carbon
이것은 실제로 php dateTime (이미 여기에 사용 된)의 확장이며 diffForHumans 메소드입니다. 그래서 당신이해야 할 일은 :
$dt = Carbon::parse('2012-9-5 23:26:11.123789'); echo $dt->diffForHumans();
더 많은 예 : http://carbon.nesbot.com/docs/#api-humandiff
이 솔루션의 장점 :
-
==============================
6.
function humanTiming ($time) { $time = time() - $time; // to get the time since that moment $time = ($time<1)? 1 : $time; $tokens = array ( 31536000 => 'year', 2592000 => 'month', 604800 => 'week', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second' ); foreach ($tokens as $unit => $text) { if ($time < $unit) continue; $numberOfUnits = floor($time / $unit); return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':''); } } echo humanTiming( strtotime($mytimestring) );
-
==============================
7.
나는 다음과 같은 결과를 발견 못생긴 :
그 때문에 복수형을 존중하고 빈 값을 제거하고 선택적으로 출력을 줄일 수있는 기능을 실현했습니다.
function since($timestamp, $level=6) { global $lang; $date = new DateTime(); $date->setTimestamp($timestamp); $date = $date->diff(new DateTime()); // build array $since = json_decode($date->format('{"year":%y,"month":%m,"day":%d,"hour":%h,"minute":%i,"second":%s}'), true); // remove empty date values $since = array_filter($since); // output only the first x date values $since = array_slice($since, 0, $level); // build string $last_key = key(array_slice($since, -1, 1, true)); $string = ''; foreach ($since as $key => $val) { // separator if ($string) { $string .= $key != $last_key ? ', ' : ' ' . $lang['and'] . ' '; } // set plural $key .= $val > 1 ? 's' : ''; // add date value $string .= $val . ' ' . $lang[ $key ]; } return $string; }
훨씬 나아 보인다.
선택적으로 $ level = 2를 사용하여 다음과 같이 단축하십시오.
영어로만 필요하거나 필요에 맞게이 번역을 편집하려면 $ lang 부분을 제거하십시오.
$lang = array( 'second' => 'Sekunde', 'seconds' => 'Sekunden', 'minute' => 'Minute', 'minutes' => 'Minuten', 'hour' => 'Stunde', 'hours' => 'Stunden', 'day' => 'Tag', 'days' => 'Tage', 'month' => 'Monat', 'months' => 'Monate', 'year' => 'Jahr', 'years' => 'Jahre', 'and' => 'und', );
-
==============================
8.
원래 함수를 약간 수정했습니다 (제 의견으로는 더 유용하거나 논리적이었습니다).
// display "X time" ago, $rcs is precision depth function time_ago ($tm, $rcs = 0) { $cur_tm = time(); $dif = $cur_tm - $tm; $pds = array('second','minute','hour','day','week','month','year','decade'); $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600); for ($v = count($lngh) - 1; ($v >= 0) && (($no = $dif / $lngh[$v]) <= 1); $v--); if ($v < 0) $v = 0; $_tm = $cur_tm - ($dif % $lngh[$v]); $no = ($rcs ? floor($no) : round($no)); // if last denomination, round if ($no != 1) $pds[$v] .= 's'; $x = $no . ' ' . $pds[$v]; if (($rcs > 0) && ($v >= 1)) $x .= ' ' . $this->time_ago($_tm, $rcs - 1); return $x; }
-
==============================
9.
다른 옵션을 던지면 ...
내가 여기에 게시하는 DateTime 메소드를 선호하는 반면, 나는 0 년 등으로 표시된 사실을 싫어했다.
/* * Returns a string stating how long ago this happened */ private function timeElapsedString($ptime){ $diff = time() - $ptime; $calc_times = array(); $timeleft = array(); // Prepare array, depending on the output we want to get. $calc_times[] = array('Year', 'Years', 31557600); $calc_times[] = array('Month', 'Months', 2592000); $calc_times[] = array('Day', 'Days', 86400); $calc_times[] = array('Hour', 'Hours', 3600); $calc_times[] = array('Minute', 'Minutes', 60); $calc_times[] = array('Second', 'Seconds', 1); foreach ($calc_times AS $timedata){ list($time_sing, $time_plur, $offset) = $timedata; if ($diff >= $offset){ $left = floor($diff / $offset); $diff -= ($left * $offset); $timeleft[] = "{$left} " . ($left == 1 ? $time_sing : $time_plur); } } return $timeleft ? (time() > $ptime ? null : '-') . implode(' ', $timeleft) : 0; }
-
==============================
10.
나는 이것을 만들었고 1470919932와 같은 유닉스 타임 스탬프 나 16-08-11 14:53:30과 같은 형식화 된 시간 둘 다에서 잘 작동하고있다.
function timeAgo($time_ago) { $time_ago = strtotime($time_ago) ? strtotime($time_ago) : $time_ago; $time = time() - $time_ago; switch($time): // seconds case $time <= 60; return 'lessthan a minute ago'; // minutes case $time >= 60 && $time < 3600; return (round($time/60) == 1) ? 'a minute' : round($time/60).' minutes ago'; // hours case $time >= 3600 && $time < 86400; return (round($time/3600) == 1) ? 'a hour ago' : round($time/3600).' hours ago'; // days case $time >= 86400 && $time < 604800; return (round($time/86400) == 1) ? 'a day ago' : round($time/86400).' days ago'; // weeks case $time >= 604800 && $time < 2600640; return (round($time/604800) == 1) ? 'a week ago' : round($time/604800).' weeks ago'; // months case $time >= 2600640 && $time < 31207680; return (round($time/2600640) == 1) ? 'a month ago' : round($time/2600640).' months ago'; // years case $time >= 31207680; return (round($time/31207680) == 1) ? 'a year ago' : round($time/31207680).' years ago' ; endswitch; } ?>
-
==============================
11.
그것을 확인하는 데 도움이됩니다.
function calculate_time_span($seconds) { $year = floor($seconds /31556926); $months = floor($seconds /2629743); $week=floor($seconds /604800); $day = floor($seconds /86400); $hours = floor($seconds / 3600); $mins = floor(($seconds - ($hours*3600)) / 60); $secs = floor($seconds % 60); if($seconds < 60) $time = $secs." seconds ago"; else if($seconds < 3600 ) $time =($mins==1)?$mins."now":$mins." mins ago"; else if($seconds < 86400) $time = ($hours==1)?$hours." hour ago":$hours." hours ago"; else if($seconds < 604800) $time = ($day==1)?$day." day ago":$day." days ago"; else if($seconds < 2629743) $time = ($week==1)?$week." week ago":$week." weeks ago"; else if($seconds < 31556926) $time =($months==1)? $months." month ago":$months." months ago"; else $time = ($year==1)? $year." year ago":$year." years ago"; return $time; } $seconds = time() - strtotime($post->post_date); echo calculate_time_span($seconds);
-
==============================
12.
나는 여기에 몇 가지 해답이 있다는 것을 알고 있지만 이것이 내가 생각해 낸 것이다. 이 함수는 MySQL DATETIME 값만 응답합니다. 배열 $ a는 약간의 작업이 필요합니다. 개선 방법에 대한 의견을 환영합니다. 다른 이름으로 전화 :
에코 time_elapsed_string ( '2014-11-14 09:42:28');
function time_elapsed_string($ptime) { // Past time as MySQL DATETIME value $ptime = strtotime($ptime); // Current time as MySQL DATETIME value $csqltime = date('Y-m-d H:i:s'); // Current time as Unix timestamp $ctime = strtotime($csqltime); // Elapsed time $etime = $ctime - $ptime; // If no elapsed time, return 0 if ($etime < 1){ return '0 seconds'; } $a = array( 365 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second' ); $a_plural = array( 'year' => 'years', 'month' => 'months', 'day' => 'days', 'hour' => 'hours', 'minute' => 'minutes', 'second' => 'seconds' ); foreach ($a as $secs => $str){ // Divide elapsed time by seconds $d = $etime / $secs; if ($d >= 1){ // Round to the next lowest integer $r = floor($d); // Calculate time to remove from elapsed time $rtime = $r * $secs; // Recalculate and store elapsed time for next loop if(($etime - $rtime) < 0){ $etime -= ($r - 1) * $secs; } else{ $etime -= $rtime; } // Create string to return $estring = $estring . $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' '; } } return $estring . ' ago'; }
-
==============================
13.
나는 이것을 시도하고 나를 위해 잘 작동합니다.
$datetime1 = new DateTime('2009-10-11'); $datetime2 = new DateTime('2009-10-10'); $difference = $datetime1->diff($datetime2); echo formatOutput($difference); function formatOutput($diff){ /* function to return the highrst defference fount */ if(!is_object($diff)){ return; } if($diff->y > 0){ return $diff->y .(" year".($diff->y > 1?"s":"")." ago"); } if($diff->m > 0){ return $diff->m .(" month".($diff->m > 1?"s":"")." ago"); } if($diff->d > 0){ return $diff->d .(" day".($diff->d > 1?"s":"")." ago"); } if($diff->h > 0){ return $diff->h .(" hour".($diff->h > 1?"s":"")." ago"); } if($diff->i > 0){ return $diff->i .(" minute".($diff->i > 1?"s":"")." ago"); } if($diff->s > 0){ return $diff->s .(" second".($diff->s > 1?"s":"")." ago"); } }
참조 용으로이 링크를 확인하십시오.
감사! 재미있게 놀아 라.
-
==============================
14.
여기에있는 많은 솔루션은 반올림을 설명하지 않았습니다. 예 :
이벤트는 이틀 전 오후 3시에 발생했습니다. 오후 2시에 확인하면 하루 전에 표시됩니다. 오후 4시에 확인 중이면 2 일 전에 표시됩니다.
유닉스 시간으로 작업한다면, 다음과 같이 도움이된다.
// how long since event has passed in seconds $secs = time() - $time_ago; // how many seconds in a day $sec_per_day = 60*60*24; // days elapsed $days_elapsed = floor($secs / $sec_per_day); // how many seconds passed today $today_seconds = date('G')*3600 + date('i') * 60 + date('s'); // how many seconds passed in the final day calculation $remain_seconds = $secs % $sec_per_day; if($today_seconds < $remain_seconds) { $days_elapsed++; } echo 'The event was '.$days_ago.' days ago.';
윤초와 일광 절약 시간이 걱정된다면 완벽하지 않습니다.
-
==============================
15.
타임 스탬프의 각 부분을 가져 와서 유닉스 시간으로 변환해야합니다. 타임 스탬프 예를 들어, 2009-09-12 20:57:19.
(((2008-1970) * 365) + (8 * 30) +12) * 24 + 20은 1970 년 1 월 1 일 이후의 시간에 대한 대략적인 추정치를 제공합니다.
그 숫자를 취하여 60을 곱하고 57을 더하여 분을 얻으십시오.
가져 가라. 60을 곱하고 19를 더한다.
그러나 그것은 매우 거칠고 부정확하게 변환 될 것입니다.
정상적인 유닉스 시간으로 시작할 수없는 이유가 있습니까?
-
==============================
16.
MySQL을 사용하는 경우 UNIX_TIMESTAMP () 함수를 사용하십시오.
-
==============================
17.
이 기능은 영어로 사용되지 않습니다. 나는 영어로 단어를 번역했다. 영어를 사용하기 전에 더 많은 수정이 필요합니다.
function ago($d) { $ts = time() - strtotime(str_replace("-","/",$d)); if($ts>315360000) $val = round($ts/31536000,0).' year'; else if($ts>94608000) $val = round($ts/31536000,0).' years'; else if($ts>63072000) $val = ' two years'; else if($ts>31536000) $val = ' a year'; else if($ts>24192000) $val = round($ts/2419200,0).' month'; else if($ts>7257600) $val = round($ts/2419200,0).' months'; else if($ts>4838400) $val = ' two months'; else if($ts>2419200) $val = ' a month'; else if($ts>6048000) $val = round($ts/604800,0).' week'; else if($ts>1814400) $val = round($ts/604800,0).' weeks'; else if($ts>1209600) $val = ' two weeks'; else if($ts>604800) $val = ' a week'; else if($ts>864000) $val = round($ts/86400,0).' day'; else if($ts>259200) $val = round($ts/86400,0).' days'; else if($ts>172800) $val = ' two days'; else if($ts>86400) $val = ' a day'; else if($ts>36000) $val = round($ts/3600,0).' year'; else if($ts>10800) $val = round($ts/3600,0).' years'; else if($ts>7200) $val = ' two years'; else if($ts>3600) $val = ' a year'; else if($ts>600) $val = round($ts/60,0).' minute'; else if($ts>180) $val = round($ts/60,0).' minutes'; else if($ts>120) $val = ' two minutes'; else if($ts>60) $val = ' a minute'; else if($ts>10) $val = round($ts,0).' second'; else if($ts>2) $val = round($ts,0).' seconds'; else if($ts>1) $val = ' two seconds'; else $val = $ts.' a second'; return $val; }
-
==============================
18.
위의 약간 수정 된 답변 :
$commentTime = strtotime($whatever) $today = strtotime('today'); $yesterday = strtotime('yesterday'); $todaysHours = strtotime('now') - strtotime('today'); private function timeElapsedString( $commentTime, $todaysHours, $today, $yesterday ) { $tokens = array( 31536000 => 'year', 2592000 => 'month', 604800 => 'week', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second' ); $time = time() - $commentTime; $time = ($time < 1) ? 1 : $time; if ($commentTime >= $today || $commentTime < $yesterday) { foreach ($tokens as $unit => $text) { if ($time < $unit) { continue; } if ($text == 'day') { $numberOfUnits = floor(($time - $todaysHours) / $unit) + 1; } else { $numberOfUnits = floor(($time)/ $unit); } return $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '') . ' ago'; } } else { return 'Yesterday'; } }
-
==============================
19.
이것이 내가 함께 간 것입니다. 그것은 압바스 칸 (Abbas khan) 지위의 수정판입니다 :
<?php function calculate_time_span($post_time) { $seconds = time() - strtotime($post); $year = floor($seconds /31556926); $months = floor($seconds /2629743); $week=floor($seconds /604800); $day = floor($seconds /86400); $hours = floor($seconds / 3600); $mins = floor(($seconds - ($hours*3600)) / 60); $secs = floor($seconds % 60); if($seconds < 60) $time = $secs." seconds ago"; else if($seconds < 3600 ) $time =($mins==1)?$mins."now":$mins." mins ago"; else if($seconds < 86400) $time = ($hours==1)?$hours." hour ago":$hours." hours ago"; else if($seconds < 604800) $time = ($day==1)?$day." day ago":$day." days ago"; else if($seconds < 2629743) $time = ($week==1)?$week." week ago":$week." weeks ago"; else if($seconds < 31556926) $time =($months==1)? $months." month ago":$months." months ago"; else $time = ($year==1)? $year." year ago":$year." years ago"; return $time; } // uses // $post_time="2017-12-05 02:05:12"; // echo calculate_time_span($post_time);
-
==============================
20.
우리가 응용 프로그램에서 '1 시간 전'또는 2 주 전 등과 같이 시간을 표시해야하는 메시지 또는 알림 시스템을 개발할 때 메시지의 현재 시간과 이후 시간을 계산하는 것입니다.
나는이 사이트에 xx time 함수가 작동하지 않는 이전에 질문에 대한 대답을 여기에있다.
이게 너에게 도움이되기를 바란다.
-
==============================
21.
$time_ago = ' '; $time = time() - $time; // to get the time since that moment $tokens = array ( 31536000 => 'year',2592000 => 'month',604800 => 'week',86400 => 'day',3600 => 'hour', 60 => 'minute',1 => 'second'); foreach ($tokens as $unit => $text) { if ($time < $unit)continue; $numberOfUnits = floor($time / $unit); $time_ago = ' '.$time_ago. $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'').' '; $time = $time % $unit;}echo $time_ago;
-
==============================
22.
여기 내 해결책은 확인하고 요구 사항에 따라 수정하십시오
function getHowLongAgo($date, $display = array('Year', 'Month', 'Day', 'Hour', 'Minute', 'Second'), $ago = '') { date_default_timezone_set('Australia/Sydney'); $timestamp = strtotime($date); $timestamp = (int) $timestamp; $current_time = time(); $diff = $current_time - $timestamp; //intervals in seconds $intervals = array( 'year' => 31556926, 'month' => 2629744, 'week' => 604800, 'day' => 86400, 'hour' => 3600, 'minute' => 60 ); //now we just find the difference if ($diff == 0) { return ' Just now '; } if ($diff < 60) { return $diff == 1 ? $diff . ' second ago ' : $diff . ' seconds ago '; } if ($diff >= 60 && $diff < $intervals['hour']) { $diff = floor($diff / $intervals['minute']); return $diff == 1 ? $diff . ' minute ago ' : $diff . ' minutes ago '; } if ($diff >= $intervals['hour'] && $diff < $intervals['day']) { $diff = floor($diff / $intervals['hour']); return $diff == 1 ? $diff . ' hour ago ' : $diff . ' hours ago '; } if ($diff >= $intervals['day'] && $diff < $intervals['week']) { $diff = floor($diff / $intervals['day']); return $diff == 1 ? $diff . ' day ago ' : $diff . ' days ago '; } if ($diff >= $intervals['week'] && $diff < $intervals['month']) { $diff = floor($diff / $intervals['week']); return $diff == 1 ? $diff . ' week ago ' : $diff . ' weeks ago '; } if ($diff >= $intervals['month'] && $diff < $intervals['year']) { $diff = floor($diff / $intervals['month']); return $diff == 1 ? $diff . ' month ago ' : $diff . ' months ago '; } if ($diff >= $intervals['year']) { $diff = floor($diff / $intervals['year']); return $diff == 1 ? $diff . ' year ago ' : $diff . ' years ago '; } }
감사
-
==============================
23.
# This function prints the difference between two php datetime objects # in a more human readable form # inputs should be like strtotime($date) function humanizeDateDiffference($now,$otherDate=null,$offset=null){ if($otherDate != null){ $offset = $now - $otherDate; } if($offset != null){ $deltaS = $offset%60; $offset /= 60; $deltaM = $offset%60; $offset /= 60; $deltaH = $offset%24; $offset /= 24; $deltaD = ($offset > 1)?ceil($offset):$offset; } else{ throw new Exception("Must supply otherdate or offset (from now)"); } if($deltaD > 1){ if($deltaD > 365){ $years = ceil($deltaD/365); if($years ==1){ return "last year"; } else{ return "<br>$years years ago"; } } if($deltaD > 6){ return date('d-M',strtotime("$deltaD days ago")); } return "$deltaD days ago"; } if($deltaD == 1){ return "Yesterday"; } if($deltaH == 1){ return "last hour"; } if($deltaM == 1){ return "last minute"; } if($deltaH > 0){ return $deltaH." hours ago"; } if($deltaM > 0){ return $deltaM." minutes ago"; } else{ return "few seconds ago"; } }
-
==============================
24.
사용:
echo elapsed_time('2016-05-09 17:00:00'); // 18 saat 8 dakika önce yazıldı.
기능:
function elapsed_time($time){// Nekadar zaman geçmiş $diff = time() - strtotime($time); $sec = $diff; $min = floor($diff/60); $hour = floor($diff/(60*60)); $hour_min = floor($min - ($hour*60)); $day = floor($diff/(60*60*24)); $day_hour = floor($hour - ($day*24)); $week = floor($diff/(60*60*24*7)); $mon = floor($diff/(60*60*24*7*4)); $year = floor($diff/(60*60*24*7*4*12)); //difference calculate to string if($sec < (60*5)){ return 'şimdi yazıldı.'; }elseif($min < 60){ return 'biraz önce yazıldı.'; }elseif($hour < 24){ return $hour.' saat '.$hour_min.' dakika önce yazıldı.'; }elseif($day < 7){ if($day_hour!=0){$day_hour=$day_hour.' saat ';}else{$day_hour='';} return $day.' gün '.$day_hour.'önce yazıldı.'; }elseif($week < 4){ return $week.' hafta önce yazıldı.'; }elseif($mon < 12){ return $mon.' ay önce yazıldı.'; }else{ return $year.' yıl önce yazıldı.'; } }
-
==============================
25.
당신이 사용할 수있는:
date("Y-m-d H:i:s",strtotime("1 day ago"));
-
==============================
26.
다음은 매우 간단하고 매우 효율적인 솔루션입니다.
function timeElapsed($originalTime){ $timeElapsed=time()-$originalTime; /* You can change the values of the following 2 variables based on your opinion. For 100% accuracy, you can call php's cal_days_in_month() and do some additional coding using the values you get for each month. After all the coding, your final answer will be approximately equal to mine. That is why it is okay to simply use the average values below. */ $averageNumbDaysPerMonth=(365.242/12); $averageNumbWeeksPerMonth=($averageNumbDaysPerMonth/7); $time1=(((($timeElapsed/60)/60)/24)/365.242); $time2=floor($time1);//Years $time3=($time1-$time2)*(365.242); $time4=($time3/$averageNumbDaysPerMonth); $time5=floor($time4);//Months $time6=($time4-$time5)*$averageNumbWeeksPerMonth; $time7=floor($time6);//Weeks $time8=($time6-$time7)*7; $time9=floor($time8);//Days $time10=($time8-$time9)*24; $time11=floor($time10);//Hours $time12=($time10-$time11)*60; $time13=floor($time12);//Minutes $time14=($time12-$time13)*60; $time15=round($time14);//Seconds $timeElapsed=$time2 . 'yrs ' . $time5 . 'months ' . $time7 . 'weeks ' . $time9 . 'days ' . $time11 . 'hrs ' . $time13 . 'mins and ' . $time15 . 'secs.'; return $timeElapsed; }
에코 timeElapsed (1201570814);
샘플 출력 :
6yrs 4months 3 주 4 일 12 시간 40 분 36 초.
-
==============================
27.
내가 작성한 알림 모듈에 대한 나의 해결책은 다음과 같다. Facebook의 알림 드롭 다운과 비슷한 출력을 반환합니다 (예 : 1 일 전, 바로 지금 등).
public function getTimeDifference($time) { //Let's set the current time $currentTime = date('Y-m-d H:i:s'); $toTime = strtotime($currentTime); //And the time the notification was set $fromTime = strtotime($time); //Now calc the difference between the two $timeDiff = floor(abs($toTime - $fromTime) / 60); //Now we need find out whether or not the time difference needs to be in //minutes, hours, or days if ($timeDiff < 2) { $timeDiff = "Just now"; } elseif ($timeDiff > 2 && $timeDiff < 60) { $timeDiff = floor(abs($timeDiff)) . " minutes ago"; } elseif ($timeDiff > 60 && $timeDiff < 120) { $timeDiff = floor(abs($timeDiff / 60)) . " hour ago"; } elseif ($timeDiff < 1440) { $timeDiff = floor(abs($timeDiff / 60)) . " hours ago"; } elseif ($timeDiff > 1440 && $timeDiff < 2880) { $timeDiff = floor(abs($timeDiff / 1440)) . " day ago"; } elseif ($timeDiff > 2880) { $timeDiff = floor(abs($timeDiff / 1440)) . " days ago"; } return $timeDiff; }
-
==============================
28.
그냥이 func에 날짜 시간을 전달하십시오. 그것은 당신을 위해 시간 형식으로 인쇄 할 것입니다.
date_default_timezone_set('your-time-zone'); function convert($datetime){ $time=strtotime($datetime); $diff=time()-$time; $diff/=60; $var1=floor($diff); $var=$var1<=1 ? 'min' : 'mins'; if($diff>=60){ $diff/=60; $var1=floor($diff); $var=$var1<=1 ? 'hr' : 'hrs'; if($diff>=24){$diff/=24;$var1=floor($diff);$var=$var1<=1 ? 'day' : 'days'; if($diff>=30.4375){$diff/=30.4375;$var1=floor($diff);$var=$var1<=1 ? 'month' : 'months'; if($diff>=12){$diff/=12;$var1=floor($diff);$var=$var1<=1 ? 'year' : 'years';}}}} echo $var1,' ',$var,' ago'; }
-
==============================
29.
원래 작성되었으며이 링크에서 사용 가능합니다.
function _ago($tm,$rcs = 0) { $cur_tm = time(); $dif = $cur_tm-$tm; $pds = array('second','minute','hour','day','week','month','year','decade'); $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600); for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]); $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]); if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm); return $x; }
시간 () 값이 필요하며 몇 초 / 분 / 시간 / 일 / 년 / 십 년 전에 몇 초가되는지 알려줍니다.
-
==============================
30.
나는 몇 년 동안 다음과 같은 기능을 사용하고 있습니다. 그리고 그것은 잘 작동합니다 :
function timeDifference($timestamp) { $otherDate=$timestamp; $now=@date("Y-m-d H:i:s"); $secondDifference=@strtotime($now)-@strtotime($otherDate); $extra=""; if ($secondDifference == 2592000) { // months $difference = $secondDifference/2592000; $difference = round($difference,0); if ($difference>1) { $extra="s"; } $difference = $difference." month".$extra." ago"; }else if($secondDifference > 2592000) {$difference=timestamp($timestamp);} elseif ($secondDifference >= 604800) { // weeks $difference = $secondDifference/604800; $difference = round($difference,0); if ($difference>1) { $extra="s"; } $difference = $difference." week".$extra." ago"; } elseif ($secondDifference >= 86400) { // days $difference = $secondDifference/86400; $difference = round($difference,0); if ($difference>1) { $extra="s"; } $difference = $difference." day".$extra." ago"; } elseif ($secondDifference >= 3600) { // hours $difference = $secondDifference/3600; $difference = round($difference,0); if ($difference>1) { $extra="s"; } $difference = $difference." hour".$extra." ago"; } elseif ($secondDifference < 3600) { // hours // for seconds (less than minute) if($secondDifference<=60) { if($secondDifference==0) { $secondDifference=1; } if ($secondDifference>1) { $extra="s"; } $difference = $secondDifference." second".$extra." ago"; } else { $difference = $secondDifference/60; if ($difference>1) { $extra="s"; }else{$extra="";} $difference = round($difference,0); $difference = $difference." minute".$extra." ago"; } } $FinalDifference = $difference; return $FinalDifference; }
from https://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-e-g-1-day-ago-2-days-ago by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP 짧은 태그를 활성화하는 방법? (0) | 2018.09.02 |
---|---|
PHP 메일 ()로 첨부 파일을 보내시겠습니까? (0) | 2018.09.02 |
경고 : mysql_fetch_array () : 제공된 인수가 유효한 MySQL 결과가 아닙니다. (0) | 2018.09.02 |
A 요소의 href 속성 가져 오기 (0) | 2018.09.02 |
참조 - PDO에 대해 자주 묻는 질문 (0) | 2018.09.02 |