用php添加一年到日期时间

时间:2011-03-06 17:50:05

标签: php

$data['user']['time'] = '2011-03-07 00:33:45';    

我们怎么能在这个日期加1年?

类似于$newdata = $data['user']['time'] + 1 year

$newdata = 2012-03-07 00:33:45

由于

Adam Ramadhan

6 个答案:

答案 0 :(得分:24)

strtotime()是您正在寻找的功能:

$data['user']['seal_data'] = date('Y-m-d H:i:s', strtotime('+1 year', strtotime($data['user']['time'])));

答案 1 :(得分:12)

首先,您必须将MySQL datetime转换为PHP可以理解的内容。这有两种方法......

  1. 在查询中使用UNIX_TIMESTAMP()告诉MySQL返回datetime列的UNIX时间戳。

    SELECT whatever, UNIX_TIMESTAMP(myTime) AS 'myUnixTime' FROM myTable;
    
  2. 使用DateTime::createFromFormat将字符串时间转换为PHP可以理解的内容。

    $date = DateTime::createFromFormat('Y-m-d H:i:s', $data['user']['time']);
    

  3. 完成后,您可以使用时间...根据您上面使用的方法,您可以使用以下方法之一。

    1. 如果您有unix时间戳,可以使用以下内容添加一年:

      $inAYear = strtotime('+1 year', $data['user']['unixTime']);
      
    2. 如果您有DateTime个对象,则可以使用以下内容:

      $inAYear = $date->add(new DateInterval('P1Y'));
      

    3. 现在,要以可敬的格式显示日期,您必须告诉PHP以正确的格式返回字符串。

      1. 如果您有unix时间戳,则可以使用以下内容:

        $strTime = date('Y-m-d H:i:s', $inAYear);
        
      2. 如果您有DateTime个对象,则可以使用以下内容:

        $strTime = $inAYear->format('Y-m-d H:i:s');
        

      3. 或者,如果您不想处理所有这些问题,可以在查询时添加一年。

        SELECT whatever, DATE_ADD(myTime, INTERVAL 1 YEAR) AS 'inAYear' FROM myTable;
        

答案 2 :(得分:4)

我认为您可以使用strtotime()来轻松完成此操作。类似的东西:

$newdata = date('c', strtotime($data['user']['time'] . ' +1 year'));

虽然'c'格式字符串与输入格式不同。您可以参考date()的文档,了解如何构建正确的文档。

'Y-m-d H:i:s' - 正如Tim Cooper建议的那样 - 看起来是正确的。

答案 3 :(得分:4)

Current(2017)练习是使用DateTime

这个问题在谷歌搜索“php datetime add one year”上排名第一,但严重过时。虽然大多数以前的答案在大多数情况下都能正常使用,但建立的标准是使用 DateTime 对象,主要是由于strtotime需要小心操作时区和DST。

TL; DR

  1. 转换为日期时间$date = new DateTime('2011-03-07 00:33:45', [user TZ]);
  2. 使用DateTime::modify$date->modify('+1 year');
  3. 需要格式化。
  4. 遵循这种操作日期和时间的模式将为您处理最严重的时区/ DST /跳跃时间。

    记住最后两个笔记:

    • 系统时区设置为 UTC 时,生活会更轻松。
    • 永远不要在配置文件之外修改系统时区。
      • 我看过太多依赖date_default_timezone_set的代码。如果你这样做,停下来。将时区保存在变量中,然后将其传递给您的应用程序, please

    更多阅读

    How to calculate the difference between two dates using PHP?

    Convert date format yyyy-mm-dd => dd-mm-yyyy

    PHP - strtotime, specify timezone

答案 4 :(得分:1)

这应该可以解决问题(未经测试)。

$data = "2011-03-07 00:33:45";

echo 'Original date +1 year: ' . date('Y-m-d H:i:s', strtotime(date("Y-m-d H:i:s", strtotime($data)) . " +1 year"));

答案 5 :(得分:0)

首先,如果您的日期格式以斜杠(/)分隔,例如'2019/12/31',则应将其转换为短划线(-)格式,例如“ 2019-12-31 ”,请使用str_replace()函数。

$string = str_replace('/', '-', '2019/12/31'); //output: 2019-12-31

要添加时间/天/月/年,请不要使用strtotime()函数,因为它不能添加 2038 年以外的时间。 所以在这里我更喜欢使用DateTime()函数。

$string = '2000-01-01';
$date = new DateTime($string);
$date->add(new DateInterval('P60Y5M2DT6H3M25S')); //60 Years 5 Months 2 Days 6 Hours 3 Minutes 25 Seconds
echo $date->format('Y-m-d H:i:s'); //output: 2060-06-03 06:03:25