使用php从日期减去天,月或年

时间:2014-01-03 10:43:56

标签: php date

我有一个db表,其中startBefore格式的日期字段为('Y-m-d')。还有3个其他int字段表示年,月和日。我想要做的是以startAfter格式填写这三个字段的新'Y-m-d'日期。

例如,我将'2001-11-14'作为startBefore日期,我想减去3年零7个月,1天才能获得startAfter日期。

我有什么想法可以做到这一点?

谢谢!

4 个答案:

答案 0 :(得分:23)

使用strtotime('date -years -months -days')

  <?php
    $time = strtotime('2001-11-14 -3 years -7 months -5 days');
    echo $date = date("Y-m-d", $time);

答案 1 :(得分:16)

来自DateTime

$start_date = '2013-03-06';
$date = DateTime::createFromFormat('Y-m-d',$start_date);

$date->modify('+1 month');
echo $date->format('Y-m-d');//2013-04-06

$date->modify('+4 year');
echo $date->format('Y-m-d');//2017-04-06

$date->modify('+6 day');
echo $date->format('Y-m-d');//2017-04-12

$date->modify('+24 hours');
echo $date->format('Y-m-d');//2017-04-13

$date->modify('-7 years');
echo $date->format('Y-m-d'); //2010-04-13

$date->modify('-18 months');
echo $date->format('Y-m-d'); //2008-10-13

等等。

答案 2 :(得分:2)

你可以尝试

php中的

strtotime函数非常简单

<?php 
echo date("jS F, Y", strtotime("11.12.10")); 
// outputs 10th December, 2011 

echo date("jS F, Y", strtotime("11/12/10")); 
// outputs 12th November, 2010 

echo date("jS F, Y", strtotime("11-12-10")); 
// outputs 11th December, 2010  
?> 

答案 3 :(得分:0)

一种方法是使startBefore日期成为时间戳,而不是使用数字并重新获得startAfter日期,另一种方法是尝试直接从日期中减去天,月和年。