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

StackOverflow https://stackoverflow.com/questions/8685

  •  08-06-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать 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 />";
?>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top