參見下面的代碼爲什麼的strtotime給出不同的值
$compDate = date('d/m/y',strtotime('-2 weeks'));
echo strtotime($compDate)."-->".strtotime('-2 weeks');
回聲輸出1398882600-->1388938336
。
爲什麼時間戳有什麼不同?
參見下面的代碼爲什麼的strtotime給出不同的值
$compDate = date('d/m/y',strtotime('-2 weeks'));
echo strtotime($compDate)."-->".strtotime('-2 weeks');
回聲輸出1398882600-->1388938336
。
爲什麼時間戳有什麼不同?
的第一個問題是錯誤的格式 - 由Sharanya Dutta說。第二個是你在格式化爲m/d/y
而不是m/d/y, H:i:s
時失去了精度。
$compDate = date('m/d/y',strtotime('-2 weeks'));
print date("d.m.Y @ H:i:s", strtotime($compDate)); //05.01.2014 @ 00:00:00
print date("d.m.Y @ H:i:s", strtotime('-2 weeks')); //05.01.2014 @ 17:23:42
當您添加小時,分鐘和秒來$compDate
,它會如預期
$compDate = date('m/d/y, H:i:s',strtotime('-2 weeks'));
var_dump(strtotime($compDate) === strtotime('-2 weeks')); // TRUE
如果您不需要的時間,但只有日期,你可以設置時間也在strtotime()
。
$compDate = date('m/d/y',strtotime('-2 weeks'));
var_dump(strtotime($compDate) === strtotime('-2 weeks, 0:0:0')); // TRUE
這是從PHP手冊:
日期在M/d/y或DMY格式通過查看在各個組件之間的分離器消除歧義:如果分離器是斜線(/),那麼假設美國的m/d/y;而如果分隔符是破折號( - )或點(。),則假定歐洲的d-m-y格式。
因此改變d/m/y
要麼d-m-y
或m/d/y
和strtotime將很好地工作。
更新:是的,kingkero是正確的。您必須將d/m/y
更改爲d-m-y H:i:s
或m/d/y H:i:s
。關鍵是你不能忽視小時,分鐘和秒。
我測試 'DMY',和它不匹配 –
'米/ d/Y:1388860200 - > 1388939310''DMY:1105641000- - > 1388939260'我不明白 –
strtotime
假定x/x/x
符號是美國和x-x-x
符號歐洲。既然你在d/m/Y
正在傳遞的格式爲$compDate
,然後傳遞一個日期字符串通過strtotime()
爲第二次,它被解釋日期字符串作爲m/d/Y
第二次。您可以通過改變這樣的代碼確認:
$compDate = strtotime('-2 weeks');
echo $compDate . "-->" . strtotime('-2 weeks');
或者這樣說:
$compDate = date('d-m-y',strtotime('-2 weeks'));
echo strtotime($compDate) . "-->" . strtotime('-2 weeks');
或者這樣說:
$compDate = date('m/d/y',strtotime('-2 weeks'));
echo strtotime($compDate) . "-->" . strtotime('-2 weeks');
一個更好的解決辦法是使用DateTime
類,它允許您使用createFromFormat
定義給定字符串的日期格式,以便解析器知道哪個數字是:
$compDate = date('d/m/y',strtotime('-2 weeks'));
$compDateObject = DateTime::createFromFormat('d/m/y', $compDate);
echo $compDateObject->format('U') . "-->" . strtotime('-2 weeks');
最後一個例子有點令人費解,因爲通常使用像-2 weeks
這樣的相對字符串,你不需要擔心格式化,但我猜你真正遇到的問題是使用的日期格式整個代碼在d/m/y
,所以上面給出瞭如何在該格式和和時期時間戳之間進行交換的想法。如果你想使用DateTime
得到一個相對日期(如-2 weeks
),你可以改造爲以上:
$compDate = new DateTime('-2 weeks');
echo $compDate->format('U') . "-->" . strtotime('-2 weeks');
echo $compDate->format('d/m/Y');
如果你想在時間戳是日期,但不希望使用時間,你可以添加到today
相對格式,像這樣:
$compDate = new DateTime('2 weeks ago today');
echo $compDate->format('U') . "-->" . strtotime('-2 weeks 00:00');
echo $compDate->format('d/m/Y');
$ compDate = date('d-m-y',strtotime(' - 2 weeks')); echo strtotime($ compDate)。 「 - >」。 strtotime(' - 2周');不會像上面說的那樣給o/p –
你是對的,它的精度和格式是 –
恩,是的。當你在代碼中調用'strtotime' * *時,它會返回一個不同的值。時間已過。 – Anthony
即使在這種情況下,時間戳也不會有太大差異。我可以一秒鐘刷新至少3次。 :) –