代码之家  ›  专栏  ›  技术社区  ›  aalaap

在时间戳上加上13小时

  •  12
  • aalaap  · 技术社区  · 15 年前

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

        2009-07-14 02:00:00
    

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

        2009-07-14 15:00:00
    

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

    8 回复  |  直到 15 年前
        1
  •  22
  •   Community CDub    7 年前

    我知道

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

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

    strtotime date 作用

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

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

        2
  •  16
  •   Ionuț G. Stan    12 年前

    在使用基本算法计算时间时,时区和夏令时存在很多问题。最好的解决方案是依赖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'));
    
        3
  •  3
  •   aalaap    7 年前

    我知道这是很久以前问过的问题,我已经选择了答案,但我认为,重要的是要让新用户朝着更现代、更正确的方向发展,这就是使用神奇的技术 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",
       }
    

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

    上面输出示例中的shell是Laravel Tinker。Laravel附带碳元素,因此上述声明是开箱即用的。如果您没有使用现代PHP框架,那么您应该这样做。向其中添加碳很容易。

        4
  •  2
  •   n8wrl    15 年前

    你能在数据库中添加数据吗?

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

    (SQL Server)

        5
  •  1
  •   Richy B.    15 年前

    你们有一张有时间戳的桌子吗?如果是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)));
    

    或者,如果您使用PHP5,请使用 Datetime 功能

    $date = new DateTime('2009-07-14 02:00:00');
    date_add($date, new DateInterval("P13H"));
    
        6
  •  1
  •   BenMorel Manish Pradhan    10 年前

    你可以用 http://de3.php.net/manual/en/function.strptime.php 将其转换为unix时间戳。 然后你可以很容易地加上13*60*60,然后使用 http://de3.php.net/manual/en/function.date.php

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

        7
  •  0
  •   David Barnes    15 年前
    <?php
    echo date('Y-m-d H:i:s', strtotime('+13 hours', strtotime('2009-07-14 02:00:00')));
    ?>
    
        8
  •  -1
  •   tfont    10 年前

    假设您从表中选择了一个特定的日期字段,名为“ 日期时间字段 “从第3000行开始。就这么简单!

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

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

    或者,如果您只是在查询中添加13小时(时区差异)。可以使用MySQL 现在() 作为原始时间,只需添加上述时间。 选择、更新或插入,

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

    保持简单和快速!

    :o)