月別アーカイブ: 2021年8月

PHP 時間の差分を求める

日付を除外して時間のみを求める方法がなかったのでまとめ

<?php

$from_h = '8'; // 08でも可
$from_m = '10';
$to_h = '17';
$to_m = '00';

echo sectostr(strtosec($to_h, $to_m) - strtosec($from_h, $from_m));
// 08:50と表示されます

function sectostr($val) {
    return sprintf("%02d:%02d", $val / 3600, ($val % 3600) / 60);
}

function strtosec($h, $m) {
    return $h * 3600 + $m * 60;
}

時間と分を秒に直して差分を出しています。
秒に直すのでstrtotimeやnew DateTimeにて比較しなくてもいいです。
strtotimeとnew DateTimeは日付ありきでの比較になるので時間のみの差分を出すときややこしいです。
下記一例

<?php

echo date('Y/m/d H:i', strtotime('17:00') - strtotime('8:10'));
// 1970/01/01 09:50と表示

strtotimeだと日付の引き算がされ時間のみの差分が出せません。
強引にやるならこう

<?php

echo date('Y/m/d H:i', strtotime('17:00') - strtotime('8:10') + strtotime(date('Y/m/d')));
// 2021/08/14 08:50と表示

引き算された日付を最後に足して日付のつじつまを合わせていますが、このコードは休憩時間を除いたりするときに日付のことを常に考えなくてはならずややこしすぎて使えません。

XAMPP Xdebug3 Eclipse 設定

Xdebugが2から3にアップグレードしていて動かなかったのでまとめ

下記コードがXdebug2のphp.iniの設定

xdebug.remote_enable=1
xdebug.default_enable=0
xdebug.profiler_enable=0
xdebug.auto_trace=0
xdebug.coverage_enable=0

上記コードがXdebug3では使えなくなって、次のように書く

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug-3.0.4-8.0-vs16-x86_64.dll"
xdebug.mode=debug

ポートも9000から9003に変更になってたのでEclipseのデバッグの構成

Xdebug