2011-11-09 73 views
0

我已經找到了將時間戳轉換爲X Time Ago的這個類。 除了一個問題,它的效果很好。我在太平洋時區,所以時間總是在8小時前說,當時應該說是2秒前。轉換後的時間戳中的時區差異

class Cokidoo_DateTime extends DateTime { 
     protected $strings = array(
      'y' => array('1 year ago', '%d years ago'), 
      'm' => array('1 month ago', '%d months ago'), 
      'd' => array('1 day ago', '%d days ago'), 
      'h' => array('1 hour ago', '%d hours ago'), 
      'i' => array('1 minute ago', '%d minutes ago'), 
      's' => array('now', '%d secons ago'), 
     ); 

     /** 
     * Returns the difference from the current time in the format X time ago 
     * @return string 
     */ 
     public function __toString() { 
      $now = new DateTime('now'); 
      $diff = $this->diff($now); 

      foreach($this->strings as $key => $value){ 
       if(($text = $this->getDiffText($key, $diff))){ 
        return $text; 
       } 
      } 
      return ''; 
     } 

     /** 
     * Try to construct the time diff text with the specified interval key 
     * @param string $intervalKey A value of: [y,m,d,h,i,s] 
     * @param DateInterval $diff 
     * @return string|null 
     */ 
     protected function getDiffText($intervalKey, $diff){ 
      $pluralKey = 1; 
      $value = $diff->$intervalKey; 
      if($value > 0){ 
       if($value < 2){ 
        $pluralKey = 0; 
       } 
       return sprintf($this->strings[$intervalKey][$pluralKey], $value); 
      } 
      return null; 
     } 
    } 

如何通過SQL插入新行:

mysql_query("INSERT INTO `" . $dbMain . "`.`" . $dbTable . "` (`title`, `date`) VALUES ('$fileTitle', NOW())"); 

默認設置爲CURRENT_TIMESTAMP;

我該如何修改我的方法才能使其工作? 理想情況下,我希望這對所有人都是普遍的,所以無論您在哪個時區,它都會根據新條目何時存在顯示X時間。

+0

是本地時間還是UTC的時間戳? –

+0

看起來好像他們是UTC。 – Aaron

回答

0
 $now = new DateTime('now'); 

This請求當地時間。但你想要UTC時間。 Specify UTC作爲構造函數的第二個參數。