1

Excelシートから値を読み取り、それらをSQLテーブルに挿入するスクリプトがあります。私の問題は、スクリプトがいくつかの日付フィールドを読み取り、それらをデフォルト値に設定するときです:1970-01-01 01:00:00

これは、「日」が 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

これは私が探している正確な形式です (日と月のフィールドが入れ替わっていること、つまりアメリカの日付形式を除いて) ですが、上記の日付の種類では機能しません。

4

3 に答える 3

1

に関する注意事項から、この関数は、 で区切られた日付と a で区切られた日付が であるとstrtotime()想定しています。/m/d/y-d-m-y

日付文字列のスラッシュを置き換えるか、5.3 以降を使用している場合は を使用しdate_parse_from_format()て、形式を直接指定できます。

また、jaudette で述べたようDateTime::createFromFormat()に、 を使用して、タイムスタンプの代わりにオブジェクトを取得することもできます。

于 2012-12-01T14:40:21.403 に答える
1

オブジェクトを使用するDateTimeことが解決策になる場合があります。できるよ

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

をクリックして、必要な形式を選択します。

于 2012-12-01T14:40:30.440 に答える
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];
于 2012-12-01T15:07:05.133 に答える