您的代碼看起來不錯。但一些想法,有什麼可以去錯了:
起初:試試下面的代碼:
<?php
var_dump($_GET['thedate']); // check what it is?
date_default_timezone_set('Europe/Warsaw'); // set default timezone to your zone/user zone
echo date('d-m-Y',strtotime('2015-06-30')); // check that date is working with plain text
?>
首先記得要經常使用date_default_timezone_set('Europe/Warsaw');
。它對於你的應用程序可能非常重要。其次,以純文本模式輸入日期。如果這可行,這意味着日期函數工作正常,並且您的GET或GET變量操作後出現問題。
第二個:從來沒有驗證_GET變量。對不起雙重否定,但也許是因爲它,它可以更難忘;)。 始終解析用戶在URL中輸入的數據。始終解析:
- _GET數據
- _POST數據
- _REQUEST數據
- _SERVER數據(是的,他們中的一些可以被操縱
- 所有其他弱勢數據...
所以總結一下:你的代碼(你輸入的那個是OK),檢查GET變量和變量操作後,總是檢查所有不可信的數據。
更多關於驗證數據:
根據與使用上_GET變量urldecode意見的解決方案之一:
<?php echo date('d-m-Y',strtotime(urldecode($_GET["thedate"])));?>
「警告!超全球變量$ _GET和$ _REQUEST已經被解碼。在$ _GET或$ _REQUEST元素上使用urldecode()可以有意外的危險結果「
來源:http://php.net/manual/en/function.urldecode.php
我似乎無法重現錯誤,我得到'30-06-2015'是你試着在'thedate'之前做任何事情,然後在任何地方迴應它? – Derek
沒什麼,這就是爲什麼它很奇怪 – Kamikaza
試試'<?php echo date('dm -Y',strtotime(urldecode($ _ GET [「thedate」 ])));?>' –