目前共有3篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:台灣正體▼
 
點擊 回復
685 2
【案例】使用PHP自帶的DateTime類和DateTimeZone類來處理日期與時間的一些問題
一派掌門 二十級
1樓 發表于:2015-11-17 23:16
<?php
date_default_timezone_set('UTC'); // 設置默認的時區

$utc = new DateTimeZone('UTC'); // UTC標準時區
$userTZ = new DateTimeZone('GMT+8'); // 假設用戶設置的時區是東八區

echo '輸出當前的UTC時間:';
$time = new DateTime();
echo $time->format('Y-n-j H:i:s');
echo '<br>';

echo '輸出當前的用戶時區時間:';
$time = new DateTime();
$time->setTimezone($userTZ);
echo $time->format('Y-n-j H:i:s');
echo '<br><br>';


echo '規定資料庫中始終保存UTC時間。<br>';
$timeFromDB = '2015-4-14 12:02:03'; // 假設這就是從資料庫某欄位中讀取的時間值
echo "現在從資料庫中取出一個時間記錄:{$timeFromDB},然後按用戶所設時區顯示出來:";
$time = new DateTime($timeFromDB);
$time->setTimezone($userTZ); // 轉換成用戶所設的時區
echo $time->format('Y-n-j H:i:s'); // 顯示出來
echo '<br><br>';

echo '現在用戶按自己的時區輸入了一個時間,現在要把這個時間按UTC時區存入資料庫。<br>';
$input = '2010-7-6 11:23:16';
echo "假設用戶輸入的是:$input";
$time = new DateTime($input, $userTZ);
$time->setTimezone($utc); // 轉換為UTC時間
$sql = "INSERT INTO ... (...) VALUES ('" . $time->format('Y-n-j H:i:s') . "');"; // 把UTC時間存入資料庫中
echo "<br>那麼要執行的SQL語句則是:<br>$sql<br>";
?>
一派掌門 二十級
2樓 發表于:2015-11-17 23:16
【輸出內容】
輸出當前的UTC時間:2015-11-17 15:16:22
輸出當前的用戶時區時間:2015-11-17 23:16:22

規定資料庫中始終保存UTC時間。
現在從資料庫中取出一個時間記錄:2015-4-14 12:02:03,然後按用戶所設時區顯示出來:2015-4-14 20:02:03

現在用戶按自己的時區輸入了一個時間,現在要把這個時間按UTC時區存入資料庫。
假設用戶輸入的是:2010-7-6 11:23:16
那麼要執行的SQL語句則是:
INSERT INTO ... (...) VALUES ('2010-7-6 03:23:16');

 
一派掌門 二十級
3樓 發表于:2015-11-17 23:22
輸入一個UTC時區的時間戳,再以用戶所設置的時區顯示出來。
<?php
$timestamp = 1307773525;
$time2 = new DateTime();
$time2->setTimestamp($timestamp);
$time2->setTimezone($userTZ);
echo $time2->format('Y-n-j H:i:s');
?>

輸出:2011-6-11 14:25:25
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:685 回複數:2
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-11-17 23:22
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。