カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

3ヶ月前の末日を取得する

日付関数を使って3ヶ月前の末日を取得するTipsです。

$year  = date("Y"); //2018
$month = date("n"); //3
$day   = 0;         //末日を取得するので「0」とする

$time = mktime(0, 0, 0, $month - 2, $day, $year);

echo date("Y-m-d", $time);

出力結果は「2017-12-31」となります。

Visual Basicでやってみる

VBでも同様のことができます。

DateSerial(Year(Date), Month(Date) - 2, 0)
1,469 views

日付の加算・減算 DateTimeクラス

date関数とstrtotime関数で日付の加算・減算ができます。
同じようにDateTimeクラス・DateIntervalクラスを使っても実現できます。

まずはオブジェクトを生成します。

$date = new DateTime('2000-01-01');

10時間と30秒を加算してみます。

$date->add(new DateInterval('PT10H30S'));

表示書式を指定して出力します。

echo $date->format('Y-m-d H:i:s');

出力は以下のようになります。

2000-01-01 10:00:30

今度は7年、5ヶ月、4日、4時間、3分、2秒を加算してみます。

$date->add(new DateInterval('P7Y5M4DT4H3M2S'));

続きを読む…»

2,596 views

日付の差を求める [PHP]

2つの日付の差を求めるサンプルです。
DateTimeクラスを使用します。

まずは2つの日付のオブジェクトを生成します。

$datetime1 = new DateTime('1981-04-22');
$datetime2 = new DateTime('1981-01-01');

DateTime::diffメソッドで日付の差を求めます。
返り値にはDateIntervalオブジェクトが返ります。

$interval = $datetime1->diff($datetime2);

DateIntervalオブジェクトのプロパティ

y
m
d
h 時間
i
s
invert 差が負の場合は1、そうでない場合は0
days 日数

例)2つの日付の差となる日数を出力する

print $interval->days;

また、フォーマットした文字列を取得したい場合はDateInterval::formatメソッドを使用します。
続きを読む…»

3,019 views

指定したディレクトリ内のファイル一覧を取得する

読み込むファイル名の中には「.」と「..」が含まれるので除外します。

opendirを使う

$rdir = "[読み込むディレクトリ]";

$dh = opendir($rdir);

while (false !== ($filename = readdir($dh))) {

    // ドットで始まるファイルとディレクトリを除外
    if(!preg_match("/^\./", $filename) && !is_dir($filename)) {

        echo $filename."<br>\n";

    }

}

closedir($dh);

scandirを使う

$rdir = "[読み込むディレクトリ]";

$F = scandir($rdir);

foreach($F as $filename) {

    // ドットで始まるファイルとディレクトリを除外
    if(!preg_match("/^\./", $filename) && !is_dir($filename)) {

        echo $filename."<br>\n";

    }

}

globを使う

この場合、「.」「..」は含まれません。

$rdir = "[読み込むディレクトリ]";

foreach (glob($rdir."/*") as $filename) {
    echo $filename."<br>\n";
}
2,714 views

PHPでZip圧縮

PHPでZipArchiveクラスを使い、ファイルをZip圧縮して保存することができます。

PHP5.2.0以降ではデフォルトで使用可能となっているようですが、
明示的に使用するのであれば、コンパイル時に--enable-zipを付加してください。

作成するZipファイル名を指定します。

$zip_file = 'file.zip';

ZipArchiveクラスのインスタンスを生成します。

$zip = new ZipArchive();

ファイルを新規作成、または存在すれば上書きで開きます。

$opened = $zip->open($zip_file, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);

ファイルを追加します。

$filename = "example.jpg";
$ret = $zip->addFile($filename);

追加が完了したらZipファイルを閉じます。

$ret = $zip->close();

例)Zip圧縮したファイルをダウンロードさせる

if($ret) {
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 
    header('Content-Length: '.filesize($zip_file));
    readfile($zip_file);
}
2,951 views