使用$ _GET值重建时间戳

时间:2011-09-03 18:38:34

标签: php datetime time

我正在尝试解构当前时间戳,然后使用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 个答案:

答案 0 :(得分:5)

<?php

$month = 2;
$year = 11;

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

?>

输出:

  

2011年9月3日

     

2011年2月3日

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更具体的全局变量名。

修改

正如profitphp指出的那样,当一天不存在的那一天使用一天推进到下个月(9月和2月没有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"));

?>

输出:

  

2011年10月1日

     

2011年3月3日

http://codepad.org/RFXTze5z

答案 1 :(得分:2)

根据您给出的规格确定:

$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");
}

我给了你额外的东西..也许派上用场了^^