カテゴリー
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
0
450 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を継承したクラスを作成します。

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

0
3,927 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
続きを読む…»

0
1,489 views

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

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

テキスト例

「abc」
「bca」

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

「[^abc]*?」

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

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

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

0
2,475 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);
0
942 views

Honeycomb Cursor関連のエラー

SQLiteデータベースを扱うアプリをAndroid3.2搭載の端末に入れていてエラーが発生した。
詳細は省略しますが、以下のようなエラーが出ます。
RuntimeException: Unable to resume activity
IllegalStateException: trying to requery an already closed cursor

クエリを実行しようとしたが、カーソルが閉じているとエラーが出ています。
どうやらカーソルマネージャー機能がなくなったよう。

というわけで、マネージャーを使うのをやめ、クローズ処理をアクティビティのonDestroy()に集約。
これでエラーは解消された。

Android2.2、2.3では正常に動作するので、バージョン違いの互換性による問題のようです。
代わりのメソッドが用意されている場合もあるので、Reflectクラスを利用すれば互換性を持たせることは可能なようです。

参考?
http://d.hatena.ne.jp/ukiki999/20100524/p1

0
1,374 views

フォームのセレクトボックスを操作する

項目を追加する

document.form.SELECT_BOX.options[INDEX] = new Option(VALUE, TEXT);

項目を削除する

N番目の項目を削除する

SELECT_BOX.options[N] = null;

項目を全て削除する
※項目数は削除する毎に減少していくので、最後から順番に削除します。

var len;

with(document.form)
{
    len = SELECT_BOX.length;

    for(i = 0; i < len; i++)
    {
        SELECT_BOX.options[len - i] = null;
    }
}
0
1,055 views

指定したオブジェクトに対する処理をする [with]

with関数を使うことでスクリプトを省略することができます。

例として、以下のようなHTMLフォームがあったとします。

<form name="myForm" action="example.cgi" method="post">
	<input type="text" name="name" size="20" />
	<input type="submit" value="submit" />
</form>

フォームオブジェクトを引数として渡し、
スクリプトを省略します。

with(document.myForm)
{
	alert(name.text);
}
0
953 views

正規表現の最短一致

正規表現の文字列検索にて、最短一致を検索します。
デフォルトは最長一致ですが、量指定子("*"、"+"、"{}"等)の後に"?"を付けることで最短一致に変更できます。

Visual Basic

Dim regEx As Object
Dim Matches As Variant

'正規表現オブジェクト
Set regEx = CreateObject("VBScript.RegExp")

続きを読む…»

0
12,321 views

Shell起動したアプリケーションの終了を待つ

Dim oShell As Object, oExec As Object

'オブジェクト変数に参照をセットします
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("C:\example.exe")

'処理完了を待機
Do Until oExec.Status: DoEvents: Loop

'戻り値をセット
If Not oExec.StdErr.AtEndOfStream Then
	ExecCommand = True
	sResult = oExec.StdErr.ReadAll
ElseIf Not oExec.StdOut.AtEndOfStream Then
	sResult = oExec.StdOut.ReadAll
End If

'オブジェクト変数の参照を解放
Set oExec = Nothing: Set oShell = Nothing

'結果を表示
MsgBox sResult
0
2,960 views