2013-12-09 235 views
-1

我在POST變量中有一些短日期。php日期+ strtotime返回錯誤日期

如果我這樣做:

$i = 0; 
foreach ($data->week as $week) { 
    $date = $_POST['date'.($i+1)]; 
    echo $date; 
    ... 
    $i++; 
} 

它返回正確短日期如09.12。和12.12。

如果我這樣做

echo date('d.m.Y', strtotime($date)); 

它返回2013年9月12日(正確的)和2013年9月12日(不正確的,應該是2013年12月12日)。

Andy的想法?

+0

你爲什麼不做'$日期。 「」 。日期(Y);'?它加入了一年中的日/月 –

+0

「09.12」是一個極其模糊,不完整,模糊的日期。你不能期望'strtotime'知道你的意思。使用任何可用的方法以指定格式顯式解析日期(例如'DateTime :: createFromFormat')。 – deceze

回答

2

您的strtotime用法是不正確的。有了這樣的呼叫,它將適用於時間值爲當前日期。這就像:

var_dump(date('d.m.Y H:i:s', strtotime('12.12')));//09.12.2013 12:12:00 
var_dump(date('d.m.Y H:i:s', strtotime('11.12')));//09.12.2013 11:12:00 

相反,你應該使用DateTime API與它的createFromFormat()方法。

1

是什麼讓你停止使用DateTime類? ;)

做這樣的事情

<?php 
$dt = '12.12'; 
$ctime = DateTime::createFromFormat('d.m', $dt); 
echo $ndate= $ctime->format('d.m.Y'); // "prints" 12.12.2013