2012-12-01 168 views
1

我有一個腳本,它是從excel工作表讀取值並將它們插入到sql表中。我的問題是,當腳本讀取某些日期字段時,它將它們設置爲默認值:1970-01-01 01:00:00PHP的strtotime()設置日期爲默認

我注意到這是發生在'date'大於12的日期時: 13/05/2012 18:52:33(dd-mm-yyyy hh-mm-ss)

我以爲這可能是由於腳本認爲這是月份字段(即美國格式),它認爲它是一個無效值,所以我設置我自己的默認時區希望它可以解決問題,但它沒有任何區別。 date_default_timezone_set('Europe/Dublin');

下面是一個例子我的代碼是做:

Excel中的字段值:

01/05/2012 18:32:45

腳本:

$start_time = $data->val($x,5); 
echo $start_time = date("Y-m-d H:i:s", strtotime($start_time)); 

輸出:

2012-01-05 18:32:45 

這是我正在查找的確切格式(除了日期和月份字段切換到美國日期格式這一事實除外),但它不適用於上面提到的日期類型。

回答

1

使用DateTime對象可能是您的解決方案。你可以做

$dt = DateTime::createFromFormat("d/m/Y H:i:s", $data->val($x,5);); 
echo $dt->format('Y-m-d H:i:s'); 

並選擇你想要的格式。

+0

您好,感謝您的答覆。嘗試了你的建議,但它給了以下結果:2013-05-01 18:52:33日期13/05/2012 18:52:33 – Paddyd

+1

@Paddyd'createFromFormat'類似於'date_parse_from_format()',所以你需要將格式更新爲'd/m/YH:i:s'。 –

+0

乾杯蒂姆,改變了格式,它的工作完美! – Paddyd

1

從上strtotime()筆記,功能假定由/分隔日期是由-分隔m/d/y和日期d-m-y

您可以替換日期字符串中的斜槓,或者如果您使用5.3或更高版本,請使用date_parse_from_format(),並直接提供格式。

而作爲mentioned by jaudette你也可以使用DateTime::createFromFormat(),並獲得一個對象,而不是一個時間戳。

+0

謝謝,我現在就試試這個,讓你知道如何去 – Paddyd

1

這應該爲你做的工作:

// example datetime 
$orig_date = '13/05/2012 18:52:33'; 
// split date & time into array 
$date_time = preg_split('/\s+/', $orig_date); 
// date in array formated as ddmmyyyy 
list($d, $m, $y) = preg_split('/\//', $date_time[0]); 
// date re-formated as yyyy-mm-dd for MySQL 
$new_date = sprintf('%4d-%02d-%02d', $y, $m, $d); 
// And add time on again with a space for MySQL datetime format 
echo $new_date.' '.$date_time[1];