[英]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可以理解的内容。 有两种方法可以做到这一点......
在查询中使用UNIX_TIMESTAMP()
告诉MySQL返回datetime
列的UNIX时间戳。
SELECT whatever, UNIX_TIMESTAMP(myTime) AS 'myUnixTime' FROM myTable;
使用DateTime::createFromFormat
将您的字符串时间转换为PHP可以理解的内容。
$date = DateTime::createFromFormat('Ymd H:i:s', $data['user']['time']);
完成后,您可以使用时间...根据您上面使用的方法,您可以使用以下方法之一。
如果您有unix时间戳,则可以使用以下内容添加一年:
$inAYear = strtotime('+1 year', $data['user']['unixTime']);
如果您有DateTime
对象,则可以使用以下内容:
$inAYear = $date->add(new DateInterval('P1Y'));
现在,要以可敬的格式显示日期,您必须告诉PHP以正确的格式返回字符串。
如果您有unix时间戳,则可以使用以下内容:
$strTime = date('Ymd H:i:s', $inAYear);
如果您有DateTime
对象,则可以使用以下内容:
$strTime = $inAYear->format('Ymd H:i:s');
或者,如果您不想处理所有这些问题,则可以在查询时添加一年。
SELECT whatever, DATE_ADD(myTime, INTERVAL 1 YEAR) AS 'inAYear' FROM myTable;
这个问题是谷歌搜索“php datetime add one year”的顶级问题,但严重过时了 。 虽然大多数以前的答案将正常工作在大多数情况下,所建立的标准是使用datetime对象为这个代替,这主要是由于strtotime
需要时区和夏令时的谨慎操作。
$date = new DateTime('2011-03-07 00:33:45', [user TZ]);
$date->modify('+1 year');
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Ymd H:i:s');
遵循这种操作日期和时间的模式将为您处理最糟糕的时区/ DST /跳跃时间。
记住最后两个笔记:
我想你可以使用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.