目前共有3篇帖子。 内容转换:不转换▼
 
点击 回复
518 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)
 

本帖信息

点击数:518 回复数:2
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-11-17 23:22
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。