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

日本的日付の加算・減算

以前、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
1,245 views

カメラを扱うまとめ – Android

Androidでカメラを扱うまとめです。
単純に撮った写真を保存するパターンと、パラメーターを指定して保存するパターン、
撮影した画像を圧縮して保存するパターンの3パターンを紹介します。

まずは、カメラを使用するために必要なパーミッションをAndroidManifest.xmlに記述します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />

撮影処理をするSurfaceViewを継承したクラスを作成します。

まず、簡単に保存するパターン 続きを読む…»

4,801 views

配列の共通項を計算する – array_intersect [PHP]

複数の配列から共通するキーや値を検索する関数をご紹介。

配列の共通項を計算する – array_intersect

書式

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

配列の共通する値のキーと値が配列で返されます。
キーと値の関係は、もとの配列の組み合わせが維持されます。

パラメータ

array1 //値を調べるもとの配列
array2 //値を比較する対象とする配列
array  //さらに比較するそれ以外の配列

返り値
array1 の値のうち、 すべての引数に存在する値のものを含む連想配列を返します。

例)

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>

出力結果

Array
(
    [a] => green
    [0] => red
)

キーを基準にして配列の共通項を計算する – array_intersect_key
続きを読む…»

2,163 views

正規表現 特定の文字列を含まない文字の繰り返し

正規表現で、特定の文字を含まない文字列の検索と、
特定の文字列を含まない文字列の検索

テキスト例

「abc」
「bca」

特定の文字を含まない文字の繰り返し

「[^abc]*?」

この場合、「abc」も「bca」も検索にひっかかりません。

これは“a”と“b”と“c”が、それぞれ単独の文字として処理されるからです。
文字ではなく、文字列を指定して検索したい場合、以下のようにします。

特定の文字列を含まない文字の繰り返し
続きを読む…»

4,532 views

JavaScript エレメントの追加

var button = document.createElement("input");
button.type = "button";
button.value = "button";
button.className = "button";

// onclickイベントを追加
button.setAttribute("onclick", "func();");

document.body.appendChild(button);
1,740 views