繁体   English   中英

用php添加一年到日期时间

[英]add one year to datetime with php

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

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

比如$newdata = $data['user']['time'] + 1 year

要么

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

谢谢

亚当拉马丹

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

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

首先,您必须将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('Ymd H:i:s', $data['user']['time']); 

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

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

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

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

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

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

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

     $strTime = $inAYear->format('Ymd H:i:s'); 

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

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

Current(2017)练习是使用DateTime

这个问题是谷歌搜索“php datetime add one year”的顶级问题,但严重过时了 虽然大多数以前的答案将正常工作在大多数情况下,所建立的标准是使用datetime对象为这个代替,这主要是由于strtotime需要时区和夏令时的谨慎操作。

TL; DR

  1. 转换为DateTime$date = new DateTime('2011-03-07 00:33:45', [user TZ]);
  2. 使用DateTime :: modify$date->modify('+1 year');
  3. 格式化需求。

遵循这种操作日期和时间的模式将为您处理最糟糕的时区/ DST /跳跃时间。

记住最后两个笔记:

  • 将您的系统时区设置为UTC时,生活会更轻松。
  • 切勿在配置文件之外修改系统时区。
    • 我见过太多依赖date_default_timezone_set的代码。 如果你这样做,停下来。 保存时区中的变量,并通过它在你的应用程序,而不是

更多阅读

如何使用PHP计算两个日期之间的差异?

转换日期格式yyyy-mm-dd => dd-mm-yyyy

PHP - strtotime,指定时区

我想你可以使用strtotime()很容易地做到这一点。 就像是:

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

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

'Ymd H:我:' - 正如蒂姆库珀建议的那样 - 看起来是正确的。

这应该做的伎俩(未经测试)。

$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"));

首先,如果您的日期格式用斜杠(/)分隔,如'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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM