そんなに難しいプログラムではないけれど、開発を急いで行う際には、あったら便利な、日付をコントロールするスニペット
コード
class DATE{
//-- yyyymmddhhmmss →配列に変換
// ※$flgは返値の方法 [0:配列 1:14桁]
function str2hash($datetime){
$dt[y] = substr($datetime,0,4); //-- 年
$dt[m] = substr($datetime,4,2); //-- 月
$dt[d] = substr($datetime,6,2); //-- 日
$dt[h] = substr($datetime,8,2); //-- 時
$dt[i] = substr($datetime,10,2);//-- 分
$dt[s] = substr($datetime,12,2);//-- 秒
return $dt;
}
/**
* yyyymmdd + days
* param: $num:days(type=number)
* return: yyyymmdd
* error: return 0
*/
function advance_days($date, $days=0){
if($date){
$dt=$this->str2hash($date,'');
return date("Ymd",(mktime(0,0,0,$dt[m],$dt[d],$dt[y])+(24*60*60* $days)));//移動日算出
}
//return 0;
}
/**
* 2つのymdhisのUNIXタイム差分を求める
* param @ $ymdhis1 : 対象日A [yyyymmdd]
* param @ $ymdhis2 : 対象日B [yyyymmdd]
* return @ n秒
*/
function countDiff($ymdhis1,$ymdhis2){
//日付を配列フォーマットに変換
$d1 = $this->str2hash($ymdhis1);
$d2 = $this->str2hash($ymdhis2);
//差分を求める
$diff = mktime($d2['h'],$d2['i'],$d2['s'],$d2['d'],$d2['m'],$d2['y']) - mktime($d1['h'],$d1['i'],$d1['s'],$d1['d'],$d1['m'],$d1['y']);
return $diff;
}
/**
* 基準日から◯日間の日付一覧を返す※countは整数値のみ有効
* param @ $date1 : 基準日 [yyyymmdd]
* param @ $count : *日後(マイナスも可能)
* return @ Array
**/
function getDateRange($date1,$count){
//初期設定
$dates = array($date1);
//2つの日付間の日数
for($i=1;$i<$count;$i++){
//対象日の取得
$dates[] = $this->advance_days($date1,$i);
}
return $dates;
}
/**
* 2つの日付から、日数を求める
* param @ $date1 [yyyymmdd]
* param @ $date2 [yyyymmdd]
* return @ n日間
*/
function getDateCount($date1,$date2){
$d1 = array("y"=>substr($date1,0,4),"m"=>substr($date1,4,2),"d"=>substr($date1,6,2));
$d2 = array("y"=>substr($date2,0,4),"m"=>substr($date2,4,2),"d"=>substr($date2,6,2));
$mk1 = mktime(0,0,0,$d1['m'],$d1['d'],$d1['y']);
$mk2 = mktime(0,0,0,$d2['m'],$d2['d'],$d2['y']);
//差分を求める
$diff = $mk2 - $mk1;
return ($diff/(24*60*60))+1;
}
}
0 件のコメント:
コメントを投稿