如何在 PHP/MySQL 中增加 4 小时的时间

Posted

技术标签:

【中文标题】如何在 PHP/MySQL 中增加 4 小时的时间【英文标题】:How to add 4 hours to time in PHP/MySQL 【发布时间】:2010-12-12 07:25:26 【问题描述】:

我正在将博客从自定义构建的博客迁移到 Wordpress。 Wordpress 在数据库中寻找的字段之一是设置为 GMT 的日期/时间戳,比我们的时间提前 4 小时。所以我基本上需要获取我们的日期/时间戳(以 YYYY-MM-DD HH:MM:SS 格式),并添加四个小时。我正在查看 mysql 命令“ADDTIME”,但我认为它只适用于选择,而不适用于插入。

我编写了一个脚本,将日期分解为多个部分,并将时间增加了 4 小时,但随后的逻辑似乎需要检查 4 小时何时推进到下一天/月/年有点过分。

【问题讨论】:

没有什么可以阻止您在数据库中执行此操作。您可以在不更改时间戳的情况下从现有数据库迁移数据,然后执行 UPDATE blog_table SET blog_timestamp = DATE_ADD(blog_timestamp, INTERVAL 4 HOURS); -- 这将完成你想要的。 【参考方案1】:
date($format, strtotime("$date + 4 hours"));

【讨论】:

【参考方案2】:

没有什么可以阻止ADDTIME()INSERTUPDATE 中使用,但DATE_ADD() 可能是最有效的:

INSERT INTO table_name
SET my_datetime = DATE_ADD('2009-11-01 19:30:00', INTERVAL 4 HOURS),
...other insert columns here... ;

【讨论】:

UPDATE table SET field = DATE_ADD(field, INTERVAL 4 HOURS); 更通用一点:) 我认为 SerpicoLugNut 已经提取了时间戳,所以这就是我使用的语法。每个提取的时间戳最终都会在 INSERT 上看起来那样。有趣的是,当您离开时,我将通用格式添加为右上方的评论。 :-) 那是 INTERVAL 4 HOUR 而不是 MySQL 5.5.44 上的 INTERVAL 4 HOURS【参考方案3】:

怎么样:

date( "Y-m-d H:i:s", strtotime( "2009-08-09 23:44:22" )+4*60*60 )

甚至

date( "Y-m-d H:i:s", strtotime( "2009-08-09 23:44:22 + 4 hours" ) )

可能需要进行一些错误检查,但应该可以解决您的问题。

【讨论】:

【参考方案4】:

或者在 SQL 中更好

DATE(DATE_ADD(`Table`.`Column`, INTERVAL 4 HOURS))

【讨论】:

【参考方案5】:

对于所有使用 DATE_ADD 的答案,正确的语法是“4 HOUR”而不是“4 HOURS”(至少在当前版本的 MySQL 中):

UPDATE table SET field = DATE_ADD(field, INTERVAL 4 HOUR);

【讨论】:

【参考方案6】:

您的数据库的 TZ 似乎设置为 GMT (UTC),这是应该的。 添加到数据库时,您需要将本地日期转换为 GMT。

来自 MySQL 5.1 参考手册:

CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ() 将日期时间值 dt 从 from_tz 给定的时区转换为 to_tz 给定的时区,并返回结果值。可以按照第 5.10.8 节,“MySQL 服务器时区支持”中的说明指定时区。如果参数无效,此函数返回 NULL。

如果从 from_tz 转换为 UTC 时该值超出 TIMESTAMP 类型的支持范围,则不会发生转换。第 11.1.2 节“日期和时间类型概述”中描述了 TIMESTAMP 范围。

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
        -> '2004-01-01 13:00:00'

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
        -> '2004-01-01 22:00:00'

【讨论】:

注意:要使符号时区(GMT,PST)起作用,您必须在mysql数据库(zoneinfo)中设置与时区相关的表。【参考方案7】:

如果你使用如下(日/月/年)[巴西日期格式],它不起作用:

$todays_date = date("d/m/Y H:i:s");

回显“服务器日期/小时”。 $todays_date;

echo "服务器日期/小时 + 2 小时 ".date("d/m/Y H:i:s", strtotime("$todays_date + 2 小时"));

结果:

服务器日期/小时               10/04/2012 07:44:36

服务器日期/小时 + 2 小时  04/10/2012 09:44:36


你需要你(月/日/年),而且效果很好:

$todays_date = date("m/d/Y H:i:s"); echo "服务器日期/小时"。

$todays_date.""; echo ""服务器日期/小时 + 2 小时 ".date("m/d/Y H:i:s", strtotime("$todays_date + 2 小时"));

结果:

服务器日期/小时                04/10/2012 07:44:36

服务器日期/小时 + 2 小时  04/10/2012 09:44:36

【讨论】:

【参考方案8】:

我用过这个方法:

$format = Y-m-d; //you can use any format if you want
$date = $row['date']; // from mysql_fetch_array
$date2 = date($format, strtotime("$date + 4 week"));
echo $date;

【讨论】:

【参考方案9】:

100% 工作

<?php

$datee= date("Y-m-d", strtotime("$last_update+ 10 hours"));
$timee= date("H:i:s", strtotime("$last_update+ 10 hours"));
?>

Last update was on: <?php  echo $datee; ?>  at  <?php  echo $timee; ?>

$last_update 是来自 mysql 的值内容时间戳

结果将是这样的“Last update was on: 2015-02-05 at 05:01:43”

【讨论】:

【参考方案10】:
<?php

function data_time($DT, $pm, $val, $time_type)
    $time = date("H:i:s");
    $date = date("d.m.Y");

    if($DT=='d')
        switch($pm)
            case '+': $newData = date("d.m.Y ", strtotime("$date + $val $time_type"));
            break;
            case '-': $newData = date("d.m.Y ", strtotime("$date - $val $time_type"));
            break;
        
        return $newData;
    
    if($DT=='t')
        switch($pm)
            case '+': $newTime = date("H:i:s ", strtotime("$time + $val $time_type"));
            break;
            case '-': $newTime = date("H:i:s ", strtotime("$time - $val $time_type"));
            break;
        
        return $newTime;
    


$newData = data_time('t','+',5,'year')
//or

$DataTime = 'd'; // 't' or 'd'
$PlusMinus ='+'; // '+' or '-'
$val = 1;        // 0-9
$DMT ='month';   // 'day', 'month' or 'year'

$newData = data_time($DataTime, $PlusMinus, $val, $DMT);
echo $newData;

?>

【讨论】:

downvoting:格式错误,比其他答案复杂得多,没有任何解释。 你觉得很难吗?输入 4 值? $newData = data_time(t, '+', 5, day); 您可以将大小写更改为变量或布尔值。该解决方案包含很多功能,“秒、分、小时、天、月、年”请展示您的解决方案,这对我很有帮助。对不起我的英语伙计们,我正在学习。我只是展示了我在家学习时写的东西,而不是复制和粘贴。也许它对某人有帮助。 对不起!我想,你谈谈我的代码。以前,我没有将我的脚本添加到论坛。这是第一个。 Tnx,我会试试的。请对我的代码说几句话。这是一个严重的错误?或者,对于学习者来说这很正常?【参考方案11】:
UPDATE table SET field = DATE_ADD(field, INTERVAL 4 HOURS);

因此在 php 中用于向列添加功能很有用

【讨论】:

以上是关于如何在 PHP/MySQL 中增加 4 小时的时间的主要内容,如果未能解决你的问题,请参考以下文章

php,mysql时间差问题

使用 PHP MYSQL 生成月度日期和小时报表

定时器如何调整时间?

如何将时间增加 1 小时

php+mysql,将用户session信息存到数据库,如何及时删掉登陆超时的用户信息呢?

PHP:如何访问 phpMyAdmin / php.ini 和 extension_dir 之间的奇怪冲突