
とあるデータをファイルに保存した時に、そのファイルが最新データなのかどうかを日付で判断したくなるケースがあります。
(稀なケースですが・・・)
そんな日付の比較は、PHPでは簡単にできるという事と、ファイルのタイムスタンプを比較するやり方などの覚書です。
ファイルのタイムスタンプを取得する方法
サーバーに置いてあるファイルは、簡単にタイムスタンプを取得できます。
<?php
$file_path = "sample.txt";
$timestamp = filemtime($file_path);
$datetime = date("Y-m-d H:i:s" , $timestamp);
echo $timestamp .PHP_EOL;
echo $datetime .PHP_EOL;
【結果】
1692075615
2023-08-15 05:00:15
filemtime()は、ファイルの最終更新日をunixtimeで取得することができます。
それをわかりやすいフォーマットの、
年-月-日 時:分:秒という形にするには、普通にdate()関数でできちゃうので、この組み合わせで参照するのがいいでしょう。
日付の比較
2つのファイルがあったとします。
- data_1.txt
- data_最新.txt
さて、どっちが最終更新されたデータでしょう。
自分のパソコンの中にこんなファイルがあって困っている人もいるかもしれませんね。
こういう場合は、windowやmacのOSを使っている場合は、ファイル情報を参照して、最終更新日を参照するだけでいいんですが、サーバーにあるファイルであれば、
lsコマンドや何かしらのファイル情報を取得する必要があります。
PHPで手軽にやりたければ、次のようにすると、いいでしょう。
<?php
$file_1 = "data_1.txt";
$file_2 = "data_最新.txt";
$date_1 = date("Y-m-d H:i:s" , filemtime($file_1));
$date_2 = date("Y-m-d H:i:s" , filemtime($file_2));
if($date_1 > $date_2){
echo $file_1 . "が最新";
}
else{
echo $file_2 . "が最新";
}
2つのファイルの場合であれば、簡単にif文で対応できますが、たくさんのファイルの場合は、sort()関数などを使うという手もあるでしょう。
日付の文字列について
年-月-日 時:分:秒この日付フォーマットは、データベースなどでもこのセパレータを使っていますが、
年/月/日 時:分:秒スラッシュセパレータのパターンもあります。日付比較はこの場合でも問題なく動作できます。
注意しなければいけないのは、それぞれの数値の桁数です。
1月は01月、1時は01時という風にゼロパディングして、桁数(文字数)を一定にしておくということが重要なんですね。
比較演算子は、数値のみしか対応できないわけではなく、文字列もちゃんと比較できちゃうという事を意識できます。
それは、プログラムの中では、文字列は、文字コードに変換されて、その値を比較しているだけなので、コツをつかむと、日付以外の文字列なども比較できちゃうかもね。