日期转换奇怪的输出在PHP中

时间:2014-07-28 09:42:34

标签: php date

我有问题以YYY-d-m格式转换我的某个日期。

我有数组$ searchQuery,当使用print_r打印时,打印下面的输出:

Array ( [selectedArea] => 0 
        [checkin] => 30/07/2014 
        [checkout] => 01/08/2014 
        [rooms] => 1 
        [adults] => 2 
        [childrens] => 0 ) 

我有以下代码:

        echo "Checkin is:" .$searchQuery['checkin']."<br />";
        $what = strtotime($searchQuery['checkin']);
        echo "New checkin is:" .$newCheckin = date('Y-m-d', $what) ."<br />"; 
        echo "Checkout is:" .$searchQuery['checkout']."<br />";
        $newCheckOutTemp = strtotime($searchQuery['checkout']);
        echo "New checkout is:" .$newCheckout = date('Y-m-d', $newCheckOutTemp) ."<br/>"; 

打印以下内容:

Checkin is:30/07/2014
New checkin is:1970-01-01 ------>????    
Checkout is:01/08/2014
New checkout is:2014-01-08

我有两个问题......为什么第一个日期在转换时打印1970-01-01,第二个,我怎么能在这两个日期之间的天数差异。

任何帮助都将深受赞赏。

问候,约翰

3 个答案:

答案 0 :(得分:1)

尝试使用datetime()

$now = new DateTime(str_replace('/', '-','30/07/2014'));
echo $now->format('Y-m-d');
$newCheckOutTemp = new DateTime(str_replace('/', '-','01/08/2014'));
echo $newCheckOutTemp->format('Y-m-d'); 

date()

echo date('Y-m-d', strtotime(str_replace('/', '-',$what)));
echo $newCheckout = date('Y-m-d', strtotime(str_replace('/', '-',$newCheckOutTemp)));

对于白天的差异这么多答案: - Date Difference in php on days?

答案 1 :(得分:1)

似乎strtotime()期望您的日期格式为m / d / Y.当您通过从第30个月开始的日期时,它不知道如何处理它并返回日期1970-01-01。如果仔细查看结帐结果,可能与您预期的不一样(1月8日而不是8月1日)。

我要做的是写一个小帮手功能来处理你的所有日期。

function formatDate($date) {
    return \DateTime::createFromFormat('m/d/Y', $date)->format('Y-m-d');
}

然后稍后使用它:

$newCheckin  = formatDate($searchQuery['checkin']);
$newCheckout = formatDate($searchQuery['checkout']);

答案 2 :(得分:0)

我认为你必须尝试:date('Y-m-d', strtotime($what))而不是date('Y-m-d', $what)