Восстановление временной метки со значениями $ _GET - PullRequest
1 голос
/ 03 сентября 2011

Я пытаюсь деконструировать текущую временную метку, а затем использую mktime (...), чтобы восстановить ее, используя значения, пропущенные через $ _GET

Вот мой код.

$date =time ();
if(!empty($_GET['month'])){
    if(!empty($_GET['year'])){
        $f = getdate($date);
        $date = mktime($f["hours"], $f["minutes"], $f["seconds"], $_GET['month'],      
                       $f["days"], $_GET['year']);
    }
}

$ date используется позже и по-прежнему равно текущему времени ().

Ответы [ 2 ]

5 голосов
/ 03 сентября 2011
<?php

$month = 2;
$year = 11;

echo date('F j, Y', strtotime("now"))."\n";
echo date('F j, Y', strtotime("$month/".date('d')."/$year"));

?>

Выходы:

3 сентября 2011 г.

3 февраля 2011 г.

http://codepad.org/NWLt7ER6

РЕДАКТИРОВАТЬ

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

$get_month = (int)$_GET['month'];
$get_year = (int)$_GET['year']; // This should be a 4 digit year; no '00' - '09' to deal with

// The year check is up to you what range you accept
if (($get_month > 0 && $get_month <= 12) && ($get_year > 1900 && $get_year < 2100)) {
    $get_date = strtotime("$get_month/".date('d')."/$get_year");
}

Вы также можете захотетьпоместите это в функцию и вызовите ее, используйте ее в области видимости объекта или используйте более конкретные имена глобальных переменных, чем $date.

EDIT

И как profitphpуказывает на то, что использование дня для другого месяца, когда этот день не существует, приводит к следующему месяцу (сентябрь и февраль не имеют 31 дня):

<?php

$month = 2;
$day = 31;
$year = 11;

echo date('F j, Y', strtotime(date('m')."/$day/".date('Y')))."\n";
echo date('F j, Y', strtotime("$month/$day/$year"));

?>

Выходы:

1 октября 2011 года

3 марта 2011 года

http://codepad.org/RFXTze5z

2 голосов
/ 03 сентября 2011

Хорошо, основываясь на ваших данных спецификациях:

$new_day = isset($_GET['day']) ? $_GET['day'] : date("d");
$new_month = isset($_GET['month']) ? $_GET['month'] : false;
$new_year = isset($_GET['year']) ? $_GET['year'] : false;

if ($new_month and $new_year) {
    $date = strtotime("$new_month/$new_day/$new_year");
}

И я дал тебе кое-что еще .. Может пригодится ^^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...