Продвижение по относительным датам с помощью strtotime () - PullRequest
6 голосов
/ 12 августа 2008

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

Пример:

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

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

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

Ответы [ 3 ]

6 голосов
/ 22 сентября 2008

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

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

Пример

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

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

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

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

1 голос
/ 12 августа 2008

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

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

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

Это может быть проще для отображения через быстрый цикл

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

$time = time();

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

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

0 голосов
/ 14 августа 2008

После минуты вдохновения решение моего вопроса стало для меня очевидным (я ехал на велосипеде). '$ Now' часть

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

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

то есть: если я просматриваю сводку расписания на 10/10/2008, то это "сейчас" согласно strtotime (); вчера 8/09 и завтра 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 />";
?>

Нажатие на «<<» и «>>» переводит и отступает в день, о котором идет речь

...