2017-12-21 1 views
0

오랫동안 나는 time ago 기능으로 어려움을 겪고 있습니다. 기본적으로 나는날짜와 함께 MySQL 데이터베이스에 게시물/주석을 저장합니다. 나중에 예를 들어 53 minutes ago과 같이 추가 된 시간을 표시하고 싶습니다.PHP 시간 전 (잘못된 시간 반환)

사용자 시간대를 mysql db에 저장하고 사용자의 시간대를 사용하여이 time ago 함수를 표시하려고합니다.

그러나 내 함수는 잘못된 값을 반환합니다. 예를 들어, UTC + 2에 살고 우리 나라 시간은 11:54입니다. 새 게시물을 추가하고 db를 확인하면 추가 된 시간은 11:54이지만 시간을 표시하려면 (이전 10 초가 필요함) 1 hour, 59 minutes, 50 seconds ago이 표시되고 1 hour, 56 minutes, 26 seconds ago처럼 다운됩니다.

Car paradise screenshot - red box


시간대 기능을

if(isset($userRow['timezone'])) { 
    date_default_timezone_set($userRow['timezone']); 
}elseif(isset($_COOKIE['timeZone'])) { 
    date_default_timezone_set($_COOKIE['timeZone']); 
} 

전화 받기 기능 TIME_ELAPSED

<?php echo $user->time_elapsed($datevariable); ?> 

TIME_ELAPSED 기능

function time_elapsed($datetime, $full = 7) { 
    $now = new DateTime; 
    $ago = new DateTime($datetime); 
    $diff = $now->diff($ago); 

    echo "</br>"; 
    echo "echo db timestamp for test: "; 
    echo $datetime; 
    echo "</br>"; 

    $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'; 
} 
+0

당신은 항상 UTC에 모든 것을 변환 한 다음 일반 시간대를 기준으로 시간 계산을하고 안전 할 것이다. 모든 것을 UTC에 저장하십시오. 따라서 서버 및 사용자 시간대와 관련된 모든 종류의 문제를 피할 수 있습니다. 디스플레이에서 데이터를 분리하는 것으로 처리하십시오. – Elin

+0

@GianfrancescoAurecchia 아마도 "fuso orario"는 영어로 "시간대"가 될 수 있습니다. 또한 : OP는 PHP 코드에 대한 수정을 요구하고 있습니다. 수정 사항은 JS를 사용해서는 안됩니다. 동의하니? –

+0

예, 맞아요, 고마워요, 내 게시물을 삭제했습니다. –

답변

1

PHP가 기본 시간대를 사용하고 있습니다. php.ini 파일 date.timezone에 저장되어 있습니다. phpinfo();을 사용하고 date.timezone을 찾고 있습니다. 거기에서 변경해야 할 수도 있습니다. 경우에

가능한 시간대는 당신이 그들을 필요 PHP timezones

+0

php.ini의 기본 시간대가 비어 있습니다. –