【Step6】 日付と時刻 

PHPには、日付と時刻操作する関数があらかじめ用意されています。

getdate()関数 

今日の日付(時間)を求めます。

《構文》

getdate (timestamp)

getdate()関数は、次の文字列を要素とする連想配列を返します。

second 現在の秒
minutes 現在の分
hours 現在の時間
mday 現在の日
wday 現在の曜日番号
mon 現在の月
year 現在の年
yday その年の通算日
weekday テキスト形式の曜日
month テキスト形式の月

《サンプル》

<?php
  $today = getdate();
  echo ("今日の日付は $today[year]年$today[mon]月$today[mday]日<br>\n");
  echo ("$today[weekday] $today[month]/$today[mday]/$today[year]<br>\n");
  echo ("今年の1月1日から $today[yday]日目です");
?>

《実行結果》

今日の日付は 2025年4月29日
Tuesday April/29/2025
今年の1月1日から 118日目です

date()関数 

引数で与えた日付を指定するフォーマットの文字列に変換します。

a am または pm
A AM または PM
d 2桁の日付(01〜31)
D 3文字の曜日 (Sun 〜 Sat)
F フルスペルの英字の月(January〜December)
h 12時間単位 (00 〜 12) の時間
H 24時間単位 (00 〜 23) の時間
g 先頭に 0 をつけない12時間単位 (0 〜 12)
G 先頭に 0 をつけない24時間単位 (0 〜 23)
I 2桁の分 (00 〜 59)
j 先頭に 0 をつけない (0 〜 31)の日
l フルスペルの英字で曜日(Sunday〜Saturday)
L 閏年では 1 を、それ以外は 0 を返す
n 先頭に 0 をつけない (0 〜 12) の月
m 2桁のの月 (01 〜 12)
M 3文字の月 (Jan 〜 Dec)
s 2桁の秒 (00 〜 59)
S 英文の序数を表わす接尾語 (th 〜 nd)
t 指定した月の日数 (28 〜 31)
U UNIX時間 (1970年1月1日からの秒数)
w 数値で示す曜日 (0 〜 6)
y 西暦の下2桁を示す年
Y 西暦を4桁で示す年
z その年の1月1日からの通算日
Z タイムゾーンのオフセット秒 ( -43200 〜 43200まで)

《サンプル》

<?php
  $hiduke = date("Y/m/d");
  echo ("$hiduke<br>\n");
  $hiduke = date("Y/m/d H:i:s a");
  echo ("$hiduke<br>\n");
  $hiduke = date("y/n/j G:i:s");
  echo ("$hiduke<br>\n");
  $hiduke = date("Y F l");
  echo ("$hiduke<br>\n");
?>

《実行結果》

2025/04/29
2025/04/29 16:12:19 pm
25/4/29 16:12:19
2025 April Tuesday

 

日付要素からタイムスタンプを取得する 

mktime()関数を使うと、日付/時刻からタイムスタンプ(経過日数/時数)を計算してくれます。

<?php
//日付と時刻を設定
$hour = 11;
$minute = 59;
$second = 59;
$mm = 11;
$dd = 5;
$yyyy = 2005;

//タイムスタンプを取得
echo "指定日: $yyyy 年 $mm 月 $dd 日 $hour 時 $minute 分 $second 秒<br>";
echo "タイムスタンプ:".mktime($hour,$minute,$second,$mm,$dd,$yyyy);

//日付を省略したタイムスタンプ
$time = mktime($hour,$minute,$second);
echo "<p>タイムスタンプ: $time<br>";
echo "時刻:".date("Y/m/d H:i:s", $time);
?>

 

指定日した日数後の日付を求める 

mktime()関数を使って、日のパラメータを「指定日+経過日数」とすると、経過日数後の日付を求めることができます。

<?php
//本日の日付
$today = getdate();
$yyyy = $today[year];
$mm = $today[mon];
$dd = $today[mday];

//間隔日数
$kankaku = 30;

//タイムスタンプを取得
$date = date("Y/m/d", mktime(0,0,0, $mm,$dd + $kankaku,$yyyy));
echo "$yyyy 年 $mm 月 $dd 日 の $kankaku 日後 → ".$date ;
?>

 

月末の日付を求める 

mktime()関数で、「日」に「0」を指定すると、前月末の日付を取得することができます。「月」+1で、今月末を求めることができます。

<?php
//今日の日付を求める
$today = getdate();
$yyyy = $today[year];
$mm = $today[mon];
$kongetu = $mm + 1;


$date = date("Y/m/d", mktime(0,0,0, $mm,0,$yyyy));
echo "$yyyy 年 $mm 月 1 日 の 前日 → ".$date."(前月末)" ;

$date = date("Y/m/d", mktime(0,0,0, $mm + 1,0,$yyyy));
echo "<p>$yyyy 年 $kongetu 月 1 日 の 前日 → ".$date."(今月末)" ;
?>