그래서 사용자가 페이지를 다시로드 할 때마다 업데이트되는 사용자 테이블에 last_active
이라는 필드가 있습니다.
유닉스 타임 스탬프에 저장됩니다. Last online: 4 d 18 h 19 m ago
일, 시간, 분에 대한 유닉스 타임 스탬프
이 어떻게 그렇게 할 것 :이 같은 출력이 싶습니다
? PHP의 날짜()로 할 수 있습니까?
감사합니다.
그래서 사용자가 페이지를 다시로드 할 때마다 업데이트되는 사용자 테이블에 last_active
이라는 필드가 있습니다.
유닉스 타임 스탬프에 저장됩니다. Last online: 4 d 18 h 19 m ago
일, 시간, 분에 대한 유닉스 타임 스탬프
이 어떻게 그렇게 할 것 :이 같은 출력이 싶습니다
? PHP의 날짜()로 할 수 있습니까?
감사합니다.
가장 간단한 방법은 last_active
시간 소인과 현재 시간 소인 time()
을 사용하는 것입니다. 그런 다음 현재 시간 소인에서 마지막 활성을 뺀 다음 하루의 시간을 초 단위로 나눈 값을 일 단위로 나눌 수 있습니다. 시간 단위로 시차를 계산할 수 있습니다.
이 방법은 (등 윤년) 특별한 경우 약간 부정확 할 수 있지만 충분합니다 당신의 간단한 유스 케이스
당신이 원한다면 직접 MySQL의에이를 수:
select date_format(from_unixtime(current_timestamp - last_timestamp),
'Last online: %e days, %k hours, %i minutes, %s seconds ago.');
가 특정 날짜를 기준으로 사용자 정의 문자열을 가질 수
(당신이 자리에서 계산하려는 경우 current_timestamp
는 unix_timestamp(now())
로 대체 할 수있다). 두 개의 시간 소인의 차이로 날짜를 채우면 요청한대로 작동합니다.
위의 해결 방법은 한 달 미만인 경우에만 작동합니다. 일년 중 일을 원하면 % j를 사용하십시오. 이 함수에 대한 문서는 더 많은 것을 보여줍니다. 이 문서 밖으로
합리적이지만 중복 된 정보가 표시됩니다 (예 : 0 일, 시간이 1 일 미만인 경우 –
확인, 그것은 내가 이러한 유형의 솔루션을 필요로 할 때 나는이 간단한 기능을 썼다
http://blog.fedecarg.com/2009/06/25/format-a-time-interval-with-the-requested-granularity/
당신이 필요로 정확히 (는 입력으로 분 도착) :
function minutes_to_time($minutes)
{
$obj = "";
// extract days
$days = floor($minutes/(1440)); # Divide on the daily minutes 60 min * 24 hours
# echo "Days: " . $days;
// extract hours
$hours = floor(($minutes-($days*1440))/60);
# echo " Hours: " . $hours;
// extract left minutes
$minutes = ($minutes-($days*24*60)-($hours*60));
# echo " Minutes: " . $minutes;
if ($days > 0)
{
$obj .= $days . "d ";
}
if ($hours > 0)
{
$obj .= $hours . "h ";
}
if ($minutes >= 0)
{
$obj .= $minutes . "m ";
}
$obj .= "ago";
return $obj;
}
수십 개의 깨진 솔루션이나 반쪽 솔루션을 찾은 후에 UNIX 타임 스탬프에 대해 다음과 같은 기능을 구축했습니다.
세부 수준을 제한 할 수 있습니다 ...
echo timeDiff(1350297908);
에 "5 분 42 초 전"이 표시됩니다.
echo timeDiff(1350297908, 1);
은 "5 분 전"으로 표시됩니다.
function timeDiff($from, $levels=7){
$now = time();
$diff = ($from > $now) ? $from - $now : $now - $from;
$status = ($from > $now) ? ' away' : ' ago';
$times = array(31536000, 2628000, 604800, 86400, 3600, 60, 1);
$words = array('year', 'month', 'week', 'day', 'hour', 'minute', 'second');
$str = array();
foreach ($times as $k=>$v){
$val = floor($diff/$v);
if ($val) {
$str[] = $val .' '. $words[$k] . ($val==1 ? '' : 's');
$levels--;
}
$diff %= $v;
if ($levels==0) break;
}
return implode(', ', $str) . $status;
}
유닉스 타임 스탬프는 과거에 어떤 타임 스탬프에서 현재 타임 스탬프를 빼지 경우 1970 , 당신이이 2 개 스탬프 및 변환의 유일한 문제 사이의 정확한 초를 얻을 것이다 월 1 일 이후 초 basicly 금액입니다 그 이후의 초/일/시간/분. 윤년은 이것에 대한 부작용을 일으키지 않습니다. – rasjani
그래, 아마도 나는 약간 불분명했다. 이 경우 부작용은 없지만 타임 스탬프 스타일의 두 번째 계산으로 정확한 날짜를 얻으려고하면 문제가 발생할 수 있습니다. 그래도 지적 해 주셔서 감사합니다. –