簡體   English   中英

PHP strtotime 轉換不正確

[英]PHP strtotime incorrect conversion

我查看了手冊,這可能是一種轉換怪異,但我無法弄清楚。 我從用戶那里得到一個日期,並試圖在 PHP(4.1 版)中驗證它(使用 strtotime 並檢查返回值)。 用戶將以歐洲格式 (dmy) 輸入日期,但是當我將此格式日期提供給 strtotime 時,它是不一致的,例如:

03-01-2011 轉換為 2008 年 7 月 3 日

我知道手冊說連字符或點分隔的日期被解釋為歐洲,但它在這里不起作用。

$startDate=$_GET['start'];
echo $startDate;
$timestamp=strtotime($startDate);
echo $timestamp;
echo date("d-M-Y",$timestamp);

第一個回聲的 output 是 03-01-2011(這是正確的 - 用戶輸入的值),第二個回聲顯示時間戳為 1215039600,日期回聲顯示 03-Jul-2008

strtotime很神奇,但它並非萬無一失。 如果你想保證正確的轉換,你應該使用

$dt = DateTime::CreateFromFormat('d-m-Y', $startDate);

它允許您為輸入指定明確的格式,因此沒有歧義。

不幸的是,這只是 PHP 5.3+,而你被困在 4.1 上。 即使是strfptime()也只出現在 5.1

我強烈建議更新您的 PHP 版本,因為 4.x 已被棄用且不受支持。

話雖如此,我看不出任何類型的轉換歧義如何將 2011 年轉換為 2008 年。時區差異和日/月奇數會影響數小時和數月,但不會在 3 年內改變。

默認情況下,PHP 期望 number-number-number 為 Ymd 並從那里向后工作,直到日期有意義。 您可能需要更改您的區域設置: http://ca.php.net/manual/en/class.locale.php 這應該可以修復歐洲日期格式錯誤,但請記住,現在反過來會成為問題。

暫無
暫無

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

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