1

我试图弄清楚如何从输出时间中减去 1 小时。我们的网络服务器比我们的时间提前 1 小时。我正在使用以下内容来返回在我们的 MySQL 数据库中创建表的时间。

ini_set('date.timezone', 'America/Los_Angeles');
$con = mysql_connect('localhost','database','password');  
$db = mysql_select_db('database'); 
$sql = mysql_query("SHOW TABLE STATUS WHERE `name`=\"initm\"");  
$foo = mysql_fetch_array($sql);  
$ts = strtotime($foo['Create_time']);
echo "<h3>Last Updated ";
echo date('m/d/Y g:i a T', $ts);
echo "</h3>";  

如果我尝试减去时间$ts = strtotime($foo['Create_time']-3600);

它返回上次更新时间为 1969 年 12 月 31 日太平洋标准时间下午 4:00。我知道它是从 UNIX 时间戳中减去,它定义为自 1970 年 1 月 1 日以来的秒数,而不是从表中的时间中减去。

我尝试添加ini_set('date.timezone', 'America/Los_Angeles');,但它只是改变了输出的时区。

任何意见是极大的赞赏。PHP 和 MySQL 的新手。

4

3 回答 3

2

strtotime假设它的参数是一个字符串,并将其转换为秒。您需要在转换后进行减法:

$ts = strtotime($foo['Create_time'])-3600;
于 2012-09-14T20:17:16.533 回答
1

为什么不 :

$query = "SET time_zone = '-6:00'";

这将以与SET charset utf8.

于 2012-09-14T20:13:39.083 回答
1
SELECT UNIX_TIMESTAMP(Create_time) - 3600 ...

比通过 PHP 和 MySQL 的日期/时间处理系统进行多次往返要容易得多。

但是,由于 strtotime 给您的结果无效,我猜您存储的Create_time内容实际上并不是本地 mysql 数据/时间值,而可能是一些不稳定的非标准日期值作为字符串。这意味着 strtotime() 返回一个布尔值 FALSE 以指示失败,然后您强制 PHP 将该 false 转换为整数0来处理您的“负 3600”计算。

您通常应该始终以原生格式/类型存储内容,以防止发生此类情况。本机允许您使用本机设施进行处理。自定义格式意味着痛苦/痛苦

于 2012-09-14T20:13:46.507 回答