2015-06-25 62 views
0

我有一個文本鏈接來傳遞格式爲Y-m-d的日期GET,因爲正在從MySQL那裏來。 收到此獲得頁面使用如下代碼來呼應我從以前的頁面得到的日期PHP回聲日期從HTML格式並將其格式從Y-m-d到D-m-Y錯誤31-12-1969

鏈接是這樣

page.php?thedate=2015-06-30 

我需要顯示此日期必須轉換這個日期這樣

<?php echo date('d-m-Y',strtotime($_GET["thedate"]));?> 

所以我們展示30-06-2015

但與此代碼顯示

31-12-1969 

問題是什麼?

+1

我似乎無法重現錯誤,我得到'30-06-2015'是你試着在'thedate'之前做任何事情,然後在任何地方迴應它? – Derek

+0

沒什麼,這就是爲什麼它很奇怪 – Kamikaza

+0

試試'<?php echo date('dm -Y',strtotime(urldecode($ _ GET [「thedate」 ])));?>' –

回答

0

您的代碼看起來不錯。但一些想法,有什麼可以去錯了:

起初:試試下面的代碼:

<?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

+1

恕我直言,在服務器的配置默認時區是更好的選擇比宣佈我t在每個php文件中。 – vove

+0

是的,你是對的。對於100%的安全解決方案,我們可以放入:date_default_timezone_set(date_default_timezone_get());在index.php或配置類的開始處。鏈接:http://stackoverflow.com/questions/6208666/php-timezone-not-set –