簡體   English   中英

URL中的日期dd / mm / yyyy

[英]Date in a URL dd/mm/yyyy

我正在URL中以以下格式傳遞日期(dd / mm / yyyy):

http://www.website.com/_parameter=20/02/2000

我正在使用以下PHP將其轉換為YYYY-MM-DD格式。

<?php

    $D->query = '';

        if ($this->param('_parameter')) $D->query = date('Y-m-d', strtotime($this->param('_parameter'))); 

?>

而我的數據庫如下:

SELECT idtask FROM task WHERE unfinish=1 AND date LIKE '%".$D->query."%' "

上面返回以下內容:

1970-01-01

使用strotime() ,需要確保使用有效的datetime格式 否則, strtotime()將返回false 為您提供意外的值。

假定使用XX / XX / XXXX格式的日期為美國格式,這意味着前兩位數字代表月份,后兩位數字代表月份,后四位代表年份。 使用破折號時,日期假定為歐洲格式。 例如:

04/18/2017 = April 18, 2017
12/18/2017 = December 18, 2017
18-04-2017 = April 18, 2017
18-12-2017 = December 18, 2017

如果您不小心切換了日期和月份,則strtotime()將返回false,因為日期無效。

18/04/2017 // error
18/12/2017 // error
04-18-2018 // error
12-18-2017 // error

上面的例子很簡單。 但是,當日期不確定時,您可能會遇到問題。 例如:

04/12/2017 = April 12, 2017
12/04/2017 = December 4, 2017
04-12-2017 = December 4, 2017
12-04-2017 = April 12, 2017

在上面的示例中,通過切換日期和月份,我們仍然可以獲得有效的日期,這可能會在您的應用程序中導致意外的結果。 為了解決這些潛在的問題,建議使用DateTime::createFromFormat()解析日期廣告並返回DateTime()對象,從該對象可以獲取Unix時間戳將日期轉換為另一種格式或將其與其他格式進行比較DateTime對象。

// Parse US date format
$date1 = DateTime::createFromFormat('m/d/Y', '04/18/2017');

// Get Unix timestamp of 1493581268
$timestamp = $date1->getTimestamp();

// Parse European date format
$date2 = DateTime::createFromFormat('d-m-Y', ''18-04-2017);

// Get MySQL format (ISO-8601) of 2017-04-18
$mysqlDate = $date2->format('Y-m-d');

也可以看看:


對於您的特定情況,以下代碼將起作用:

$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000');
$D->query = $date->format('Y-m-d'); // 2000-02-20

暫無
暫無

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

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