簡體   English   中英

為什么strtotime('a')返回時間?

[英]Why does strtotime('a') return a time?

我在PHP 5.3中循環一個CSV文件並檢查日期。 我一直在使用strtotime(),它運行良好,除了我有一個包含1或2個字符代碼的字段。

任何單個字符代碼上的strtotime()似乎就像我要求now(),但如果代碼是2個字符,它會失敗,正如我所期望的那樣。

我對strtotime()的工作方式有什么不了解?

請查看http://www.php.net/manual/en/datetime.formats.time.php時間格式。 似乎'a'是一個時區。 這可能只是一個'a'有效並且它正在解決其他問題的錯誤,但至少這是解釋。

strtotime基本上最好解釋你的文本意味着什么,我認為你不能依賴它在某些字符串上失敗。

例:

<?php

echo 'Now: ' . date('c') . PHP_EOL;
echo PHP_EOL;
for($c = 'A'; $c <= 'z'; $c = chr(ord($c) + 1)) {
    echo $c . ' - ' . date('c', strtotime($c)) . PHP_EOL;
}

如果我將輸出放在http://www.timeanddate.com/library/abbreviations/timezones/military/旁邊,我只能支持@tandu的結論,即它將其解釋為時區(包括導致失效日期)。

我猜這是最好的努力。 如果您對處理單個字母的方式有疑問,請添加前面的檢查。 不是很好,但這是你嘗試解析不規則數據時得到的。

我測試了各種單個字符,它看起來像是由單個字符指定的時區中當前時間的時間戳。 Strtotime(“z”)作為Zulu時間的當前時間戳出來,比我提前四個小時,這是正確的。 軍事時區沒有“J”。

echo ((time() - strtotime('a')) / (60 * 60));

這應該等於您當前的時區,因為PHP將“a”解釋為TZ。

好吧,PHP顯然在strtotime()中使用單字符時間戳進行SOMETHING:

運行:

<?php

$now = time();
foreach(range('a', 'z') as $char) {
   $t = strtotime($char, $now);
   echo "$now ($char) -> $t {", ($now - $t), "} [", date($char, $now), "]\n";
}

給我:

1319739230 (a) -> 1319717630 {21600} [pm]
1319739230 (b) -> 1319714030 {25200} [b]
1319739230 (c) -> 1319710430 {28800} [2011-10-27T13:13:50-05:00]
1319739230 (d) -> 1319706830 {32400} [27]
1319739230 (e) -> 1319703230 {36000} [America/Chicago]
1319739230 (f) -> 1319699630 {39600} [f]
1319739230 (g) -> 1319696030 {43200} [1]
1319739230 (h) -> 1319692430 {46800} [01]
1319739230 (i) -> 1319688830 {50400} [13]
1319739230 (j) ->  {1319739230} [27]
1319739230 (k) -> 1319685230 {54000} [k]
1319739230 (l) -> 1319681630 {57600} [Thursday]
1319739230 (m) -> 1319678030 {61200} [10]
1319739230 (n) -> 1319724830 {14400} [10]
1319739230 (o) -> 1319728430 {10800} [2011]
1319739230 (p) -> 1319732030 {7200} [p]
1319739230 (q) -> 1319735630 {3600} [q]
1319739230 (r) -> 1319739230 {0} [Thu, 27 Oct 2011 13:13:50 -0500]
1319739230 (s) -> 1319742830 {-3600} [50]
1319739230 (t) -> 1319746430 {-7200} [31]
1319739230 (u) -> 1319750030 {-10800} [000000]
1319739230 (v) -> 1319753630 {-14400} [v]
1319739230 (w) -> 1319757230 {-18000} [4]
1319739230 (x) -> 1319760830 {-21600} [x]
1319739230 (y) -> 1319764430 {-25200} [11]
1319739230 (z) -> 1319721230 {18000} [299]

非常奇怪的是,一個角色的'j'完全無法返回某些東西,但其余的則返回SOMETHING。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM