2011-11-03 60 views
0

我是PHP新手,嘗試將註冊表單(格式爲01/01/2011)中的日期轉換爲Y-m-d,以便它可以存儲在數據庫中。strtotime無法正常工作

這是我的代碼,非常確定它的工作之前,但現在它已停止工作。有任何想法嗎?

$dateformat = $_POST['dob']; 
$correctformat = date('Y-m-d',strtortime($dateformat)); 

我也查了一下$_POST['dob']是印刷,它是正確的,但是$correctformat正在打印1970-01-01每次。

任何幫助將不勝感激。

感謝

+0

什麼是'$ _ POST [ 'DOB']'? – hsz

+3

我在你的腳本中假設它的「strtotime」而不是「strtortime」? – Adam

+0

它適用於我:http://codepad.org/3NSbREH4 – nickb

回答

1
$currentformat = explode("/",$_POST['date']); 
$newformat = $currentformat[2]."-".$currentformat[1]."-".$currentformat[0]; 
+0

非常感謝你!這似乎是完美的。 –

1

你可以使用DateTime::createFromFormat(注PHP 5> = 5.3.0),而不是作爲strtotime接受strtotimem/d/Yd/m/Y

嘗試:

$dateformat = $_POST['dob']; 
$correctformat = DateTime::createFromFormat('d/m/Y', $dateformat); 
echo $correctformat->format('Y-m-d'); 
+0

我已經測試過了(在他的評論中有@nickb),並且它的格式正常他已經給了。 http://www.php.net/manual/en/datetime.formats.date。php – Adam

+0

@Adam瞭解 - 也許OPs問題是'$ _POST'或其格式是d/m/Y – ManseUK

+0

當我這樣做時,我得到一個可捕獲的致命錯誤:DateTime類的對象無法轉換爲字符串。 此外,我將需要正確的格式日期是一個變量,以便我可以使用它來插入到數據庫中。 –

0

0.1。可以告訴,看日期,如果它有月份或第一天?如果你不能 - 它是如何爲任何程序來確定實際的順序?

.2。此操作需要非常基本的字符串操作人有學習,如果規劃是一個PHP用戶:

$chunks = explode("/",$_POST['date']); 
$date = "$chunks[2]-$chunks[1]-$chunks[0]"; 

塊的順序取決於日期部分的實際順序

+0

格式是m/d/Y例如30/05/2011 –

+0

實際格式不重要。你可以設置任何適合你的需求。這就是編程的目的。 –

0

正如亞當說,有是不是strtortime()它應該是strtotime()

你真的用字符串'01/01/2011'來測試它嗎?我們中的一些人在1970年以前出生 - 這可能會造成一些混淆(strtotime()會產生32位Unix時間)。 (請注意,strtotime使用mm/dd/yy [yy]的不合法風格來解釋xx/xx/xx [xx],而不是dd/mm/yy [yy]的歐洲慣例)。

它爲我用錯字刪除:

[[email protected] ~]$ php -q t.php 
2011-01-01 
[[email protected] ~]$ cat t.php 
<?php 

print date('Y-m-d',strtotime('01/01/2011')) . "\n"; 
+0

最小日期一般是1901年12月13日星期五(32位有符號整數的最小值)。但是,有些操作系統不支持這個(Windows),因此在這種情況下,min將會成爲這個時代。 – Adam

+0

抱歉,我寫這篇文章時發生拼寫錯誤。它確實說了strtotime。我測試了它的日期27/07/1985沒有工作。我明白2011年1月1日會工作,因爲月份和日期可能會混淆! –