2016-04-19 5 views
2

Я создаю приложение на PHP, которое позволит пользователю создать «сообщение», которое первоначально длится 7 дней, и пользователь может добавлять приращения в 7 дней в любое время. Я столкнулся с проблемой при работе с функцией php date («Ymd H: i: s») и добавлением дней к уже установленной дате начала, которая вытащилась из базы данных после того, как была запущена «пост» ...php date() и срок годности()

$timestamp = "2016-04-20 00:37:15"; 
$start_date = date($timestamp); 

$expires = strtotime('+7 days', $timestamp); 
//$expires = date($expires); 

$date_diff=($expires-strtotime($timestamp))/86400; 

echo "Start: ".$timestamp."<br>"; 
echo "Expire: ".$expires."<br>"; 

echo round($date_diff, 0)." days left"; 

Это то, что у меня есть до сих пор, и это не очень для меня. Может ли кто-нибудь показать мне пример правильного способа сделать это?

+0

Вы падаете в два Общие ошибки: используйте строки для обработки дат и предполагайте, что вычисления настолько просты, что вам не нужны функции даты ('/ 86400'). Кроме того, ваш код должен вызывать уведомление (* Неверно сформированное числовое значение *), видимо, вы не видите: это означает, что вы не настроили окно разработки для отображения сообщений об ошибках. –

ответ

3

У вас почти было это, вы забыли перевести метку времени в метку времени, прежде чем добавить 7 дней.

$timestamp = "2016-04-20 00:37:15"; 
$start_date = date($timestamp); 

$expires = strtotime('+7 days', strtotime($timestamp)); 
//$expires = date($expires); 

$date_diff=($expires-strtotime($timestamp))/86400; 

echo "Start: ".$timestamp."<br>"; 
echo "Expire: ".date('Y-m-d H:i:s', $expires)."<br>"; 

echo round($date_diff, 0)." days left"; 
+1

это уже строка, он забыл превратить ее в метку времени. –

+0

Вот что я пропустил. Удивительно, он щелкнет мне в голове. Благодаря! –

1

Один из возможных способов:

/* PHP/5.5.8 and later */ 
$start = new DateTimeImmutable('2016-04-20 00:37:15'); 
$end = $start->modify('+7 days'); 
$diff = $end->diff($start); 

Вы можете форматировать $diff по своему вкусу. Так как вы, кажется, нужны дни:

echo $diff->format('%d days'); 

(demo)

Для более старых версий, синтаксис немного более запутанный:

/* PHP/5.3.0 and later */ 
$start = new DateTime('2016-04-20 00:37:15'); 
$end = clone $start; 
$end = $end->modify('+7 days'); 
$diff = $end->diff($start); 

(demo)

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