2014-01-03 6 views
2

У меня есть таблица db с полем даты startBefore в формате ('Y-m-d'). Существуют также три других поля int, представляющие годы, месяцы и дни. То, что я хотел бы сделать, - заполнить эти три поля новой датой startAfter в формате 'Y-m-d'.Вычитание дней, месяцев или лет с даты с использованием php

Например, у меня есть «2001-11-14» как дата startBefore, и я хотел бы вычесть 3 года, 7 месяцев, 1 день, чтобы получить дату startAfter.

Любые идеи, как я могу это сделать?

Спасибо!

+0

Возможный дубликат [Вычитание определенного количества часов, дней, месяцев или лет с даты] (http://stackoverflow.com/questions/2382458/subtracting-a-certain-number-of-hours-days-months -или-лет с даты) –

ответ

14

использование 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

Это не работает, так как результат 1999-06-19 неверен. Правильный для вашего примера должен быть 1998-04-13. – dimoss

+0

он отлично работает для меня, он возвращает 1995-11-14. Я вычитаю 3 года 7 месяцев и 5 дней от него. еще раз проверьте и скажите мне – Nambi

+0

Да, работает нормально. Результат: 1998-04-09. Стартер, чтобы вычесть 3 года, 7 месяцев, 5 дней с '2001-11-14'. Однако я не знаю, учитывает ли он високосные годы и февраль – dimoss

2

Вы могли бы попробовать

strtotime функцию в 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 
?> 
+0

Чтобы сделать это достойным ответа, можете ли вы добавить примеры/код. –

+0

спасибо ciaran за то, что дал мне знать –

+0

Отлично! Даун-голос отступил. –

0

Один из способов сделать дату startBefore отметкой о времени, чем работа с цифрами и повторного получения даты startAfter, другой путь заключается в попытке вычесть дни, месяцы и годы непосредственно с даты.

+0

Как можно вычитать дни, месяцы, годы непосредственно с даты? Благодарю. – dimoss

+0

Извините, я ищу, вам кажется, что вам ведь нужно использовать временную метку, «формат» и вычесть нужную метку времени. – Goikiu

6

Здесь приходит 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 

так далее и так далее.

Смежные вопросы