2010-09-27 108 views
4

你好,我想找到今天和另一個日期間的strtotime今天

轉換當天的日期到這裏

<?php 
    echo '1st one'.strtotime(date("d.m.Y")).'<br>'; 
    echo '2nd one'.strtotime(date("m.d.Y")).'<br>'; 
    ?> 

UNIX時間格式的第一回波生產一些價值的差額,但不是第二個。什麼是它的bug ......請幫助..

+1

strtotime限於幾種日期格式。 – 2010-09-27 15:01:01

回答

8

strtotime根據您給出的date format作出假設。例如

date("Y-m-d", strtotime(date("d.m.Y"))) //=> "2010-09-27" 
date("Y-m-d", strtotime(date("m.d.Y"))) //=> "1969-12-31" 

注意,對於1969-12-31 19:00:00給出一個無效的日期,默認的strtotime的時間戳的時候,所以當你最終在1969年意想不到的日期,你知道你」重新使用無效日期。

因爲strtotime正在尋找day.month.year當您使用.作爲分隔符,所以它將「9.27.2010」看作27個月的第9天,這顯然不存在。

但是,如果你改變它使用/作爲分隔符:

date("Y-m-d", strtotime(date("d/m/Y"))) //=> "1969-12-31" 
date("Y-m-d", strtotime(date("m/d/Y"))) //=> "2010-09-27" 

在這種情況下,strtotime預計月/日/年格式的日期。

如果你想要安全,Y-m-d通常是一個很好的使用格式。

+0

+1,Thanku作爲詳細說明。我很欣賞你的教學方式。 – satya 2010-09-27 15:25:33

+0

當然,很樂意提供幫助。 – 2010-09-27 15:25:55

0

strtotime不考慮09.27.2010是一個有效的日期......

你可以檢查它像這樣:

<?php 
// will return false (as defined by the docs) 
echo var_dump(strtotime("09.27.2010")); 
?> 
0

功能預計會得到一個包含美國英語日期格式的字符串,並將嘗試將該格式解析爲Unix時間戳。美國時間格式爲:MM DD YYYY

+0

Hallo Stewie,在我的第二個回聲中,我想將今天的日期轉換爲unix格式。所以我用echo'2nd one'.strtotime(date(「m.d.Y」))。''
'; MM.DD中的:YYYY。這是美國日期格式。但是爲什麼回聲仍然沒有輸出任何值? – satya 2010-09-27 15:08:03

+0

@ user453893看看我的答案。雖然*你*知道你給的格式,PHP必須猜測,所以有關各種日期格式的規則。當你使用一個點作爲分隔符時,它把它當作d.m.Y. – 2010-09-27 15:12:27

+0

如果您使用DD MM YY,請使用短劃線( - )或點(。)。如果使用美國日期格式MM DD YYYY,請使用斜槓(/) – Stewie 2010-09-27 15:16:04

0

尋找有關哪些格式有效的信息http://www.php.net/manual/en/datetime.formats.php。但是,對於兩個日期之間的順從,你的意思是什麼?你的意思是2個日期之間的時間跨度?

echo (time() - strotime("- 2 days")) . " seconds difference"; 

這樣的事情?

+0

我的意思是今天和給定日期之間的差異。 – satya 2010-09-27 15:35:34

3

值得指出的是,strtotime()確實接受諸如「today」這樣的詞作爲有效輸入,所以如果您想要的只是今天的日期,則不需要在該處輸入對date()的調用。你可以使用strtotime('today');

想想吧,簡單的撥打電話time();也會得到當前的時間戳。

但實際上回答這個問題,你需要考慮d.m.Ym.d.Y曖昧 - 若每月天數小於12,這是不可能分辨出哪的這兩個日期格式之意。因此,PHP只接受其中一個(我相信它使用m/d/Y,如果你有斜線,但是對於點或破折號,它假設爲dmY。

如果你在內部使用strtotime()來轉換日期格式等,幾乎肯定有更好的方法來做到這一點。但是如果你真的需要這樣做,那麼使用'Y-m-d'格式,因爲它更加普遍可靠。另一方面,如果您接受用戶的日期輸入,並假定strtotime()將處理拋出的任何內容,那麼很遺憾,您錯了; strtotime()有一些相當大的限制,其中你找到了一個。但還有一些其他的。如果你打算爲這種事情使用strtotime(),那麼你還需要做額外的處理。也可能有更好的選擇,例如使用前端Javascript日期控件來讓用戶更容易,而不必依賴strtotime()來計算它們的含義。

+0

+1,用於提示替代方法。 – satya 2010-09-27 15:31:52

0

strtotime不會採用d.m.y格式。好的方法是Y-m-d