$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
答案 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可以理解的内容。这有两种方法......
在查询中使用UNIX_TIMESTAMP()
告诉MySQL返回datetime
列的UNIX时间戳。
SELECT whatever, UNIX_TIMESTAMP(myTime) AS 'myUnixTime' FROM myTable;
使用DateTime::createFromFormat
将字符串时间转换为PHP可以理解的内容。
$date = DateTime::createFromFormat('Y-m-d 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('Y-m-d H:i:s', $inAYear);
如果您有DateTime
个对象,则可以使用以下内容:
$strTime = $inAYear->format('Y-m-d H:i:s');
或者,如果您不想处理所有这些问题,可以在查询时添加一年。
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)
这个问题在谷歌搜索“php datetime add one year”上排名第一,但严重过时。虽然大多数以前的答案在大多数情况下都能正常使用,但建立的标准是使用 DateTime 对象,主要是由于strtotime
需要小心操作时区和DST。
$date = new DateTime('2011-03-07 00:33:45', [user TZ]);
$date->modify('+1 year');
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:s');
遵循这种操作日期和时间的模式将为您处理最严重的时区/ DST /跳跃时间。
记住最后两个笔记:
How to calculate the difference between two dates using PHP?
答案 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