【问题标题】:How to add 4 hours to time in PHP/MySQL如何在 PHP/MySQL 中增加 4 小时的时间
【发布时间】: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); -- 这将完成你想要的。

标签: php mysql datetime


【解决方案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 中用于向列添加功能很有用

                【讨论】:

                  猜你喜欢
                  • 2011-08-03
                  • 1970-01-01
                  • 2010-12-12
                  • 2011-08-22
                  • 2023-03-19
                  • 1970-01-01
                  • 2013-12-15
                  • 1970-01-01
                  相关资源
                  最近更新 更多