- 2007/04/25
- PHP
WEBアプリケーションを作っていて頻繁に使う日付や時刻のいろいろな処理。国や文化・作っている人によってさまざまなルールが存在するけど、PHPを使えば(たぶん)簡単に実現できてしまう。
指定した月が何日あるかを調べる - cal_days_in_month
cal_days_in_month() を使えば一発で分かっちゃう。
<?php $now_month = cal_days_in_month(CAL_GREGORIAN, 4, 2007); print $num_mmonth . '日あるよ'; ?>
ちなみに、CAL_GREGORIANとはグレゴリウス暦のこと。他にも
- CAL_JULIAN
- ユリウス暦
- CAL_JEWISH
- ユダヤ暦
- CAL_FRENCH
- フランス革命暦
指定した年月日の曜日を取得する
2007年4月25日って何曜日だっけー?ということが頻繁にあるので。専用の関数はないけど、date()とmktime()を使えば簡単に出せてしまう。
<?php
$weekArray = array(
0=>'日',
1=>'月',
2=>'火',
3=>'水',
4=>'木',
5=>'金',
6=>'土'
);
print $weekArray[date("w",mktime(0,0,0,4,25,2007))];
?>
年をまたいでも、先月と来月を簡単に取得する
2007年1月の先月は2006年12月で、2007年12月の来月は2007年1月で…って年をまたいだ先月・来月計算はちょっと面倒くさい。普通に if() を使って条件分岐でもできるけど本当に面倒くさい。なので、これも mktime() を使ってサクっとやっちゃう。
<?php
//今月の年月(へんな言葉)
$thisYear = 2007;
$thisMonth = 1;
//先月の年月(へんな言葉)
$preYear = date("Y", mktime(0, 0, 0, $nowMonth - 1, 1, $nowYear));
$preMonth = date("m", mktime(0, 0, 0, $nowMonth - 1, 1, $nowYear));
//来月の年月(へんな言葉)
$nextYear = date("Y", mktime(0, 0, 0, $nowMonth + 1, 1, $nowYear));
$nextMonth = date("m", mktime(0, 0, 0, $nowMonth + 1, 1, $nowYear));
?>
たったこれだけ。
英字入りの日時フォーマットを変換する
以前のエントリで取り上げたのでピックアップ!
Tue, 20 Mar 2007 10:14:58 +0900 みたいなやつね。
2つの日付の差を求める
Aという日付と、Bという日付はいったい何日何時間の差があるのかを調べたいときは、ままある。たとえば、10分おきにしか処理を実行しないスクリプトを組むときとか。
専用の関数はないけど、実は普通に引き算で出せる。
<?php //時,分,秒,月,日,年 $bDate = array(0,0,0,4,25,2007); $bDate = array(0,0,0,3,30,2007); //日付データをUNIXタイムスタンプに変換して、引き算 $dateDiff = gmmktime($bDate['0'],$bDate['1'],$bDate['2'],$bDate['3'],$bDate['4'],$bDate['5']) - gmmktime($bDate['0'],$bDate['1'],$bDate['2'],$bDate['3'],$bDate['4'],$bDate['5']); //今は差が秒で出ているので日に変換する print $dateDiff / (60 * 60 * 24); ?>
ちなみに、毎回 60 * 60 * 24 と計算するのはロスなので、日を出したいと決まっているときは 86400 と入力するのもあり。分で出したいときは 60 で割るだけ。
1週間後の日付を取得する
今日から1週間後は何年何月何日?とくよくよ悩んでいないで、mktime() でぱぱっと計算。
<?php
//今日の日付データ取得
$thisDate = mktime(0, 0, 0, date("m"), date("d"), date("y"));
//1週間後の数字をセット(秒)
//ここではわざわざ 60 * 60 * 24 としているが
//1日が 86400秒なのは明白なので
//最初から 86400 * 7 としたほうが楽。
$diffSec = 60 * 60 * 24 * 7;
//来週は何日?
$nextDate = $thisDate + $diffSec;
print date("Y-m-d",$nextDate);
?>
明日、昨日の日付を取得したい場合は「$diffSec = 60 * 60 * 24 * 7;」の 7 の部分を任意の日にちにし、足すか引くかしてください。
他にも日付・時刻関係の小技とかがあったら教えてください。
- Newer: サイトに訪れたユーザのマウスの動きをキャプチャしてくれるサービスRobotReplayを使ってみた
- Older: Wiiをやっと購入。