使用php从日期中减去天、月或年
我有一个db表,其中有一个日期字段使用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
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