【问题标题】:Add 13 hours to a timestamp将 13 小时添加到时间戳
【发布时间】:2010-11-10 14:50:43
【问题描述】:

我有一个带有时间戳值的表,例如:

2009-07-14 02:00:00

我需要在运行时显示它们并添加 13 小时,例如:

2009-07-14 15:00:00

在 PHP 中最简单的方法是什么?

【问题讨论】:

  • 07-14 02:00 到 07-15 13:00 是 35 小时,而不是 13 小时。如何计算?
  • 啊啊啊这只是一个例子……我的错!我只需要知道如何将 x 小时添加到时间戳(不是当前时间)!
  • 如果有人还在寻找这个,更好的方法是 Richy B. 的方法,即:$date = new DateTime('2009-07-14 02:00:00'); $date->add(new DateInterval('P13H'));

标签: php time


【解决方案1】:

您可以使用 http://de3.php.net/manual/en/function.strptime.php 将其转换为 unix 时间戳。 然后您可以轻松地将 13*60*60 添加到其中并使用http://de3.php.net/manual/en/function.date.php 将其转换回您喜欢的时间戳。

另一种方法是通过explode函数,但我认为这可能会更复杂,因为您必须查看天/月/年是否发生变化和东西

【讨论】:

  • 是的,除非必须,否则我不想手动操作。让我试试你提到的另一种方法。
  • +1,考虑到给定的日期格式,strtotime 也可以工作
  • -1,您不应该使用基本算术来计算时间。由于夏令时,我潜入了一些错误。我已经写过:igstan.blogspot.com/2008/12/how-not-to-make-dates-in-php.html
【解决方案2】:

当它从数据库中出来时,你能做添加吗?

SELECT ... DateAdd(hh, 13, DateField) AS DateField

(SQL 服务器)

【讨论】:

  • 服务器端的成本太高了,你不觉得吗?
  • 恕我直言,这个更好,因为一旦从查询中返回数据就是“正确的”。没有机会在意外中做其他事情或忘记转换它。
【解决方案3】:

我知道

date( "Y-M-d H:i:s", strtotime( $timestamp_from_array ) + 13 * 3600 );

很臭,但它会给你一个想法。

strtotime 将时间戳字符串转换为时间戳值,然后我们将小时数相加并使用date 函数将其转换回数组中的时间戳格式。

但我想你真正想要的是使用time zones

编辑: igstan 是正确的,您还应该注意这些偏移之间的夏令时变化。

【讨论】:

    【解决方案4】:

    在使用基本算法进行时间计算时,时区和夏令时存在很多问题。最好的解决方案是依赖 PHP 自己的日期/时间函数,例如 strtotime()mktime()。我写了关于DST problems on my blog

    echo date('Y-M-d H:i:s', strtotime('2009-07-14 02:00:00 + 13 hours'));
    

    【讨论】:

    • “+ 13 小时”,这是一个多么奇妙而简单的解决方案! (赞成)
    【解决方案5】:

    您有一张带有时间戳的表格吗?如果它是 MySQL 数据库,您可以在数据库中使用 addtime 执行此操作:SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');

    如果您使用的是 PHP Zend 框架,您可以执行以下操作:

     $date=new Zend_Date(Array('year'=>$iYear,'month'=>$iMonth,'day'=>$iDay));
     // changes $date by adding 12 hours
     $date->add('12:00:00', Zend_Date::TIMES);
    

    或者,您可以使用原生 PHP4 函数来实现,例如: [更快,不太准确:不考虑闰秒/时区变化等]

    $datestamp=strtotime('2009-07-14 02:00:00'); // It'll probably be better using mktime
    $datestamp=$datestamp+(60*60*13); // 60 seconds times 60 minutes times 13 hours
    

    或 [更慢,更准确]

      $datestamp = strtotime('2009-07-14 02:00:00'); // It'll probably be better using mktime
      $newDate = date('Y-m-d H:i:S', mktime(date('H',$datestamp)+13, date('i',$datestamp), date('s',$datestamp), date('m',$datestamp), date('d',$datestamp), date('Y',$datestamp)));
    

    或者,如果您使用的是 PHP 5,则使用 Datetime 函数

    $date = new DateTime('2009-07-14 02:00:00');
    date_add($date, new DateInterval("P13H"));
    

    【讨论】:

      【解决方案6】:
      <?php
      echo date('Y-m-d H:i:s', strtotime('+13 hours', strtotime('2009-07-14 02:00:00')));
      ?>
      

      【讨论】:

        【解决方案7】:

        假设您从第 3000 行的表中选择一个名为“datetime_field”的特定日期字段。就这么简单!

        SELECT *, ADDTIME(`datetime_field`,'0 13:00:00') as new_datetime
        FROM `table_name`
        WHERE id = 3000
        

        当然,如果想要更新,这显然也可以用于更新查询。

        或者,如果您只是在查询中添加 13 小时(时区差异)。可以使用 MySQL NOW() 作为原始时间,然后像上面一样简单地添加时间。 选择、更新或插入,都是相同的方法!应该是:

        SELECT *, NOW() as current_datetime,
                  ADDTIME(NOW(),'0 13:00:00') as new_datetime
        FROM `table_name`
        WHERE id = 3000
        

        保持简单快速!

        :o)

        【讨论】:

          【解决方案8】:

          我知道很久以前有人问过这个问题,并且我已经选择了答案,但我认为为新用户指出一个更现代和正确的方向很重要,那就是使用出色的 Carbon 库:

          >>> Carbon\Carbon::parse('2009-07-14 02:00:00')
          ... ->addHours(13)
          ... ->format('Y-m-d H:i:s');
          => Carbon\Carbon {#869
               +"date": "2009-07-14 15:00:00.000000",
               +"timezone_type": 3,
               +"timezone": "UTC",
             }
          

          Carbon 不仅使执行请求的计算变得更简单,还可以防止您在手动尝试执行相同操作时可能犯的任何潜在错误。

          上面输出示例中的 shell 是 Laravel Tinker。 Laravel 附带了 Carbon,所以上面的语句是开箱即用的。如果您没有使用现代 PHP 框架,那么您应该使用。添加碳很容易。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-22
            • 2019-04-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多