【勤怠システム】PHPでdate関数使ってみた

PHP PHP

以前仕事で勤怠管理システムを構築しました。

勤怠管理システムといえば、時間を扱うことが中心でしたので、
今回の記事では”date関数“について、簡単な使い方と実例を書きたいと思います。

※筆者は”PHP Version 7.4.6″を使用しています。
バージョンの違いにより、動作結果が違う場合がありますのでご注意ください

date関数の使いかた

まずはテキストエディタを開き、下記コードを入力して保存しましょう。
※文字コードはUTF-8。

保存フォルダ場所:C:\xampp\htdocs\test
ファイル名 :study_date.php

<?php
    print date('Y-m-d H:m:s'); //年-月-日 時;分;秒を表示
?>

xamppを起動して、http://localhost/test/study_date.phpにアクセスします。

date関数1

西暦-月-日 時:分:秒“が表示されましたね。

表示した時分秒がパソコンとあっていない場合は、xamppからphp.iniを編集して日本時間を使うように指定しましょう。 (下記の記事に設定方法を参考にしてください)

引数で変わる表示内容

ちなみにカッコ内(引数)の書き方で表示する文字が変わります。
(例)
date(‘y-m-d h:m:s’)…西暦(2桁)-月-日 時(12h表記):分:秒
date(‘w’) …日曜日の場合0、月曜日の場合1・・・土曜日の場合6
 などなど…

沢山ありますので、他にも知りたい方は下記ページを参考にどうぞ。

PHP: date - Manual

PHPでdate関数をつかった実例

今回のdate関数は、実際の勤怠システムでもよく使用されます。
一部を実例として挙げます。

まずは、出勤時間を表示させましょう。

<?php
    $start_time = '08:12:34';      //8時12分34秒を代入
    print '出勤時間:'.$start_time; //$start_timeの中身を表示
?>

上記コードは、時間を文字列として$start_timeに代入し、画面に表示しています。

date関数2

次に退勤時間を表示させましょう。
ここで、退勤時間は、study_date.phpにアクセスした時間としますので、date関数を使います。

<?php
    $start_time = '08:12:34';      //8時12分34秒を代入
    $end_time   = date('H:m:s');   //現在時刻(時分秒)を代入
    print '出勤時間:'.$start_time; //$start_timeの中身を表示
    print '<br>';                  //改行して・・・
    print '退勤時間:'.$end_time;   //$end_timeの中身を表示
?>

http://localhost/test/study_date.phpにアクセスすると、退勤時間が表示されました。

以上、date関数の基本的な使い方を紹介しました。

おまけ 勤務時間の表示

ついでに、出勤時間と退勤時間の差である、勤務時間を表示させましょう。

<?php
    $start_time = '08:12:34';      //8時12分34秒を代入
    $end_time   = date('H:m:s');   //現在時刻(時分秒)を代入
    print '出勤時間:'.$start_time; //$start_timeの中身を表示
    print '<br>';                  //改行して・・・
    print '退勤時間:'.$end_time;   //$end_timeの中身を表示
    print '<br>';                  //改行して・・・
    $work_time_sec = strtotime($end_time)-strtotime($start_time); //退勤時間から開始時間を引いて、勤務時間(秒)を求める
    print '勤務時間:'.$work_time_sec/60/60;                       //勤務時間(秒)を60で割って分とし、さらに60で割ると、時間となる
?>

strtotime関数が出てきましが、この関数は、引数に指定した文字列(日時)を
1970年1月1日 00:00:00 UTC からの経過秒数に変換して戻り値を返す関数です。

10進数表記となる為、非常に見にくいと思います。
1=1時間の為、0.25=15分となるので、注意が必要です。
見やすくする場合の一例としては以下があります。

<?php
    $start_time = '08:12:34';      //8時12分34秒を代入
    $end_time   = date('H:m:s');   //現在時刻(時分秒)を代入
    print '出勤時間:'.$start_time; //$start_timeの中身を表示
    print '<br>';                  //改行して・・・
    print '退勤時間:'.$end_time;   //$end_timeの中身を表示
    
    $work_time_sec = strtotime($end_time)-strtotime($start_time);              //退勤時間から開始時間を引いて、勤務時間(秒)を求める
    $work_time_hour = floor($work_time_sec/3600);                              //勤務時間(秒)を3600で割ると、時間を求め、小数点を切り捨てる
    $work_time_min  = floor(($work_time_sec-($work_time_hour*3600))/60);       //勤務時間(秒)から時間を引いた余りを60で割ると、分を求め、小数点を切り捨てる
    $work_time_s    = $work_time_sec-($work_time_hour*3600+$work_time_min*60); //勤務時間(秒)から時間を引いた余りを60で割ると、分を求め、小数点を切り捨てる
    
    print '<br>';                          //改行して・・・
    print '勤務時間:'.$work_time_hour.':'; //時 表示
    print             $work_time_min. ':'; //分 表示
    print             $work_time_s       ; //秒 表示
?>

無事、勤務時間の表示ができました。
お疲れさまでした!