FPUTCSV関数は、データをコンマ分離フォームのファイルに出力します。 CSVファイルは基本的にプレーンテキスト形式であるため、すべてのフィールドは文字列として保存されます。したがって、PHPのDateTimeオブジェクトまたはCSVファイルにDateTimeを含むフィールドを直接記述した場合、次の問題に遭遇する可能性があります。
一貫性のない形式:別のシステムまたはプログラムがCSVファイルを読み取る場合、日付と時刻フィールドの形式は正しく識別されない場合があります。
データの損失またはエラー:一部の日付時間形式は、保存すると精度を失う可能性があります。特に、タイムゾーン情報を含む日付。
これらの問題を回避するには、書く前に日付と時刻のフィールドを合理的にフォーマットする必要があります。
FPUTCSVを使用してDateTimeを含むフィールドを作成する場合、最も一般的なプラクティスは、 DateTimeオブジェクトのフォーマットメソッドを使用して、DateTimeを一貫した文字列形式に変換することです。たとえば、ISO 8601形式( YMD H:I:S )は通常、普遍的で非常に互換性のある選択肢です。
DateTimeオブジェクトがあり、CSVファイルに書き込みたいとしたら、次のコードを使用できます。
<span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>();
</span><span><span class="hljs-variable">$formattedDate</span></span><span> = </span><span><span class="hljs-variable">$date</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>); </span><span><span class="hljs-comment">// ASのフォーマット '2025-07-27 14:45:00'</span></span><span>
</span></span>
これにより、現在のデータタイムがyyyy-mm-dd hh:mm:ssの文字列として形成されます。
DateTimeフィールドが文字列型(データベースから取得したなど)の場合、 DateTime :: createFromFormatメソッドを使用して日付を変換およびフォーマットすることもできます。例えば:
<span><span><span class="hljs-variable">$dateString</span></span><span> = </span><span><span class="hljs-string">'2025-07-27 14:45:00'</span></span><span>;
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-title class_">DateTime</span></span><span>::</span><span><span class="hljs-title function_ invoke__">createFromFormat</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>, </span><span><span class="hljs-variable">$dateString</span></span><span>);
</span><span><span class="hljs-variable">$formattedDate</span></span><span> = </span><span><span class="hljs-variable">$date</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>
次に、 FPUTCSVを使用するときに、フォーマットされた日付と時刻をCSVファイルに書き込む方法を見てみましょう。複数のフィールドを備えた配列があるとします。その1つはデータフィールドです。
<span><span><span class="hljs-variable">$data</span></span><span> = [
[</span><span><span class="hljs-string">'Name'</span></span><span>, </span><span><span class="hljs-string">'Date'</span></span><span>, </span><span><span class="hljs-string">'Amount'</span></span><span>],
[</span><span><span class="hljs-string">'John Doe'</span></span><span>, </span><span><span class="hljs-string">'2025-07-27 14:45:00'</span></span><span>, </span><span><span class="hljs-number">1000</span></span><span>],
[</span><span><span class="hljs-string">'Jane Smith'</span></span><span>, </span><span><span class="hljs-string">'2025-07-28 09:30:00'</span></span><span>, </span><span><span class="hljs-number">1500</span></span><span>]
];
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-comment">// タイトルラインに書き込みます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);
</span><span><span class="hljs-comment">// データの行を書き込みます,日付が正しくフォーマットされていることを確認してください</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>) {
</span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>] = (</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]))-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>); </span><span><span class="hljs-comment">// フォーマット日付フィールド</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$row</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>
この例では、2番目の列(日付)は日付フィールドです。ファイルに書き込む前に、日付をYMD H:i:Sフォームにフォーマットして、 DateTimeオブジェクトの形式メソッドを使用します。このように、どのシステムをCSVファイルを読み取っても、日付は一貫した形式のままで、一貫性のない形式の問題が減ります。
タイムゾーンの問題:日付と時刻にタイムゾーン情報が含まれている場合、ISO 8601形式( YMD \ TH:I:SP )を使用することをお勧めします。ここで、 Pはタイムゾーン情報を出力します。例: 2025-07-27T14:45:00+00:00 。タイムゾーン変換によって引き起こされる問題を回避するために、フォーマット中にタイムゾーンを正しく処理してください。
CSVファイルエンコーディング:CSVファイルを保存するときに正しいエンコード形式が使用されていることを確認してください。 UTF-8エンコーディングは、特殊文字(中国語など)を正しく保存できるようにするために推奨されます。
日付の妥当性チェック:フォーマット前に、日付の文字列の有効性を確認して、無効な日付(たとえば、 2025-02-30 )を避けて、フォーマットエラーを引き起こすことを確認することが最善です。