カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

日本的日付の加算・減算

以前、PHPでの日付の加算・減算についてご紹介しました。
その時の記事はこちら↓
日付の加算・減算 DateTimeクラス

その際、月の加減については31日が加減されると記載しました。

例えば12月31日に2ヶ月を加算した場合は、翌年の3月3日になります。

今回はそのような事態にならない回避方法をご紹介します。

// 基準とする日付のオブジェクトを生成する
$myDate = new DateTime("2018-12-31");

// 新規日付オブジェクトを生成
$newDate = new DateTime();

// 2ヶ月後の末日を取得
$newDate->setDate($myDate->format("Y"), $myDate->format("n") + 2 + 1, 0);

※日付に「0」を指定することで前月の末日を取得することができます。
3ヶ月前の末日を取得する

// 2ヶ月を加算する
$myDate->add(new DateInterval("P2M"));

echo $myDate->format("Y-m-d")."\n";

echo $newDate->format("Y-m-d")."\n";

ここでの出力結果

2019-03-03
2019-02-28
// 基準日オブジェクトと2ヶ月後末日との差を求める
$result = $myDate->diff($newDate);

//$resultには日付の間隔を表すDateIntervalオブジェクトが返されます。

if($result->invert == 1) { //間隔が負の数になっている場合は 1、そうでない場合は 0

    echo "newDate\n";
    echo $newDate->format("Y-m-d");

} else {

    echo "myDate\n";
    echo $myDate->format("Y-m-d");

}

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

newDate
2019-02-28

この記事がお役に立ちましたらシェアお願いします

31 views

さくらインターネット 常時SSL化の弊害

さくらインターネットで常時SSL化した際に起こる弊害について、
限られた条件下ではありますが、解決法を見つけたので書いておきたいと思います。

まずルートディレクトリになんらかのWEBサイト(WordPressでも何でも)を運用しているとします。
そして下層ディレクトリにWordPressをインストールし、オプションのサブドメインを使用している場合のお話です。

例)test.achoo.jpというサブドメインでルートディレクトリを/achoo/に設定

さくらインターネットのサーバーで共有SSLを利用する場合、SSLを設定できるのは
デフォルトのサブドメインのみです。
オプションのサブドメインで下層ディレクトリをルートディレクトリとしている場合には
対象外となります。
続きを読む…»

この記事がお役に立ちましたらシェアお願いします

671 views

PHP5.4以上でのクラスの継承

既に定義されたクラスを継承して子クラス(サブクラス)を作成し、メソッドを上書き(オーバーライド)する際は注意が必要です。

オーバーライドするメソッドは引数の数、デフォルト値の設定が異なるとエラーになります。

Strict Standards: Declaration of ... should be compatible with ...

というのも、PHP5.3まではOKだったんです。
5.3系から5.6系にアップグレードする際はご注意ください。

この記事がお役に立ちましたらシェアお願いします

606 views

さくらインターネットのphp.ini (独自ドメインの場合)

さくらインターネットではPHPの設定を.htaccessではやらないでください、とのことらしいです。
ということで、サーバーのコントロールパネルからphp.iniの編集にて設定を変更します。

ここで少しハマったのが、複数の独自ドメインで運用していると
そこではコントロールパネルで設定した内容は反映されないようなのです。

どうすれば良いかと言いますと、それぞれのドキュメントルートにphp.iniをアップロードします。
ここで設定すればそのドメイン以下に内容が反映されます。

この記事がお役に立ちましたらシェアお願いします

738 views

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)

この記事がお役に立ちましたらシェアお願いします

498 views