Продвижение по относительным датам с помощью strtotime()
Вопрос
Я пытаюсь использовать strtotime()
чтобы ответить на нажатие кнопки, чтобы перейти на -1 и +1 день (две кнопки) относительно дня, на который был перенесен предыдущий щелчок.
Пример:
- Сейчас 10 число месяца, я нажимаю кнопку «-1 день», и теперь дата читается как 9 число.
- Я снова нажимаю кнопку «-1 день», и теперь на дисплее отображается 8-й день.
- Я нажимаю кнопку «+1 день», и теперь показания показывают, что сейчас 9-е число.
Я понимаю кнопки, отображение даты и использование $_GET
и PHP для передачи информации, но как мне получить strtotime()
работать с относительной датой с момента последнего вызова сценария путешествия во времени?
Моя работа на данный момент позволила мне показать вчера и сегодня относительно сейчас но не относительно, например, позавчера, или послезавтра.Или, если я использую свой "в прошлый понедельник" кнопка, за день до или после того, какой бы ни был этот день.
Решение
Работа с предыдущими вызовами одного и того же сценария не является хорошей идеей для такого типа вещей.
Вам нужно всегда передавать в скрипт два значения: дату и движение.(Приведенный ниже пример упрощен, так что вы передаете только дату, и к ней всегда добавляется один день)
Пример
http://www.site.com/addOneDay.php?date=1999-12-31
<?php
echo Date("Y-m-d",(strtoTime($_GET[date])+86400));
?>
Обратите внимание, что вам также следует проверить isset($_GET[date]) перед этим.
Если вы действительно хотите работать с предыдущими вызовами одного и того же сценария, вам придется делать это с помощью сеансов, поэтому укажите, так ли это.
Другие советы
Кевин, ты работаешь на прочной абсолютной базе (т.дата/время), а не относительный период времени.Затем вы конвертируете в относительные периоды времени.Так, например, по умолчанию, если бы вы отображали календарь, вы бы работали с сегодняшней даты.
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, чтобы сохранить относительную дату.
После минуты вдохновения решение моего вопроса стало для меня очевидным (я ехал на велосипеде).Часть «$сейчас»
strtottime( string $time {,int $now ])
необходимо установить как текущую дату.Не «$time()-сейчас», а «текущая дата, которая меня беспокоит/я просматриваю свой журнал.
то есть:если я смотрю на сводку расписания за 10.08.2008, то согласно strtotime() это «сейчас»;вчера 09.08, а завтра 11.08.Однажды я подкрадываюсь: «сейчас» — 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 />";
?>
Нажатие на «<<» и «>>» позволяет перейти вперед или назад к соответствующему дню.