Переход через относительные даты с помощью strtotime ()

Я пытаюсь использовать strtotime(), чтобы реагировать на нажатие кнопки, чтобы перейти на -1 и +1 день (две кнопки) относительно дня, на который было продвинуто предыдущее нажатие.

Пример:

  • Сейчас 10-е число месяца, я нажимаю кнопку «-1 день», и теперь дата читается как 9-е.
  • Я снова нажимаю кнопку «-1 день», и теперь показания показывают 8-й день.
  • Я нажимаю кнопку «+1 день», и теперь показания показывают, что это 9-й день.

Я понимаю кнопки и отображение даты и использование $_GET и PHP для передачи информации, но как мне заставить strtotime() работать с относительной датой с момента последнего вызова сценария путешествия во времени?

Моя работа до сих пор позволяла мне отображать вчера и сегодня относительно сейчас, но не относительно, например, позавчера или послезавтра < / em>. Или, если я нажимаю кнопку "последний понедельник", то за день до или после этого дня.


person kevtrout    schedule 12.08.2008    source источник


Ответы (3)


Работа с предыдущими вызовами одного и того же сценария на самом деле не очень хорошая идея для такого рода вещей.

Что вы хотите сделать, так это всегда передавать вашему скрипту два значения: дату и движение. (приведенный ниже пример упрощен, поэтому вы передаете только дату, и она всегда будет добавлять к ней один день)

Пример

http://www.site.com/addOneDay.php?date=1999-12-31

<?php
   echo Date("Y-m-d",(strtoTime($_GET[date])+86400));
?>

Обратите внимание, что вы должны убедиться, что isset ($ _ GET [date]) также перед

Если вы действительно хотите работать с предыдущими вызовами того же сценария, вам придется делать это с помощью сеансов, поэтому укажите, так ли это.

person Issac Kelly    schedule 22.09.2008

Кевин, вы отрабатываете твердую абсолютную основу (то есть дату / время), а не относительный период времени. Затем вы конвертируете в относительные периоды времени. Так, например, по умолчанию, если вы показываете календарь, вы будете работать с сегодняшней даты.

int strtotime  ( string $time  [, int $now  ] )

Вы можете видеть здесь в определении функции strtotime, второй аргумент - now, т.е. вы можете изменить дату, с которой он является относительным.

Это может быть проще отобразить с помощью быстрого цикла

Это будет проходить через последние 10 дней с использованием «вчера» в качестве первого аргумента. Затем мы используем дату, чтобы распечатать его.

$time = time();

for ($i = 0; $i < 10; $i++) {
    $time = strtotime("yesterday", $time);
    print date("r", $time) . "\n";
}

Так что передайте время / дату через URI, чтобы вы могли сохранить относительную дату.

person Philip Reynolds    schedule 12.08.2008

Через мгновение вдохновения решение моего вопроса стало для меня очевидным (я ехал на своем велосипеде). Часть "$ сейчас"

strtottime( string $time {,int $now ]) 

необходимо установить как текущую дату. Не «$ time () - сейчас», а «текущая дата, которая меня интересует / я ищу в своем журнале.

то есть: если я смотрю сводку расписания на 10.08.2008, то это «сейчас» согласно strtotime (); вчера 8 сентября, а завтра 11 августа. Как только я подкрадываюсь в один прекрасный день, «сейчас» - 8/11, вчера - 8/10, а завтра - 8/12.

Вот пример кода:

<?php

//catch variable
$givendate=$_GET['given'];

//convert given date to unix timestamp
$date=strtotime($givendate);
echo "Date Set As...: ".date('m/d/Y',$date)."<br />";

//use given date to show day before
$yesterday=strtotime('-1 day',$date);
echo "Day Before: ".date('m/d/Y',$yesterday)."<br />";

//same for next day
$tomorrow=strtotime('+1 day',$date);
echo "Next Day: ".date('m/d/Y',$tomorrow)."<br />";
$lastmonday=strtotime('last monday, 1 week ago',$date);
echo "Last Moday: ".date('D m/d/Y',$lastmonday)."<br />";

//form
echo "<form method=\"get\" action=\"{$_SERVER['PHP_SELF']}\">";

//link to subtract a day
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$yesterday)."\"><< </a>";

//show current day
echo "<input type=\"text\" name=\"given\" value=\"$givendate\">";

//link to add a day
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$tomorrow)."\"> >></a><br />";

//submit manually entered day
echo "<input type=\"submit\" name=\"changetime\" value=\"Set Current Date\">";

//close form
echo "<form><br />";
?>

Нажатие на «‹<» и «>>» приводит к переходу к соответствующему дню и отступлению от него.

person kevtrout    schedule 14.08.2008