Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php从日期中减去天、月或年_Php_Date - Fatal编程技术网

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

使用php从日期中减去天、月或年,php,date,Php,Date,我有一个db表,其中有一个日期字段startBefore,('Y-m-d')格式。还有3个其他int字段表示年、月和日。我想做的是用'Y-m-d'格式在日期之后新的开始填写这三个字段 例如,我将“2001-11-14”作为日期之前的开始,我想减去3年、7个月、1天,得到日期之后的开始 你知道我怎样才能做到这一点吗 谢谢 你可以试试 php中的函数非常简单 <?php echo date("jS F, Y", strtotime("11.12.10")); // outputs 10th

我有一个db表,其中有一个日期字段
startBefore
('Y-m-d')
格式。还有3个其他int字段表示年、月和日。我想做的是用
'Y-m-d'
格式在
日期之后新的
开始填写这三个字段

例如,我将“2001-11-14”作为日期之前的
开始,我想减去3年、7个月、1天,得到日期之后的
开始

你知道我怎样才能做到这一点吗

谢谢

你可以试试

php中的函数非常简单

<?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  
?> 

一种方法是将日期前的开始作为时间戳,而不是使用数字并重新获得日期后的开始,另一种方法是尝试直接从日期中减去天、月和年。

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


日期时间来了:

$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

诸如此类。

为了让这一回答有价值,请添加示例/代码。感谢ciaran让我知道完美!否决票被撤回。怎么可能直接从日期中减去天、月、年?谢谢。对不起,我在哪里搜索,似乎你毕竟需要使用时间戳,“格式”和减法需要时间戳。可能的重复不起作用,因为结果是1999-06-19,这是错误的。正确的例子应该是1998-04-13。它对我来说很好。它返回1995-11-14我从中减去3年7个月零5天。再次检查并告诉我是的,工作正常。结果是:1998-04-09。从“2001-11-14”中减去3年7个月5天。但是我不知道它是否考虑了闰年和二月。我认为最好的方法是首先将年转换为天,将月转换为天,然后添加剩余的天,使用您的代码获取结果。谢谢tomexsans在IMO上有一个更好的解决方案,它更面向对象,更易于阅读,代码更少,更具可扩展性。好的,如果您在当前日期计算,它会起作用:
$start_date=date('Y-m-d')
$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