0

私は上司の Timeclock アプリケーションに取り組んでおり、クロックインとクロックアウトの時間を DateTime および Timestamp として保存しています。

以下は、ユーザーの出勤日時と退勤日時の間の期間を計算する簡単な関数です。

デモ15:11:18では、2 つの日付の間に 5 日ほどあるにもかかわらず、結果が表示されることがわかります。関数に単純に日数を表示させることができることはわかっていますが、上司は日数を表示したくありません。代わりに、これは 2 つの DateTime 間の合計時間、分、秒を表示し、日数を表示しないようにする必要があります。

誰かが私を正しい方向に向けたり、適切な時間を表示するのを手伝ったりできますか?

たとえば、2 日余分に追加すると、2 日ではなく 48 時間が時間に追加されます。

public function dateTimeDifference($startDatetime, $endDatetime, $format = '%H:%I:%S')
{
    $startDatetime2 = new DateTime($startDatetime, $this->timeZone);
    $endDatetime2 = new DateTime($endDatetime, $this->timeZone);
    $interval = $startDatetime2->diff($endDatetime2);

    return $interval->format($format);

}

$startDatetime = '2013-09-10 07:15:48 pm';
$endDatetime = '2013-09-15 10:27:06 am'; 

echo dateTimeDifference($startDatetime, $endDatetime)

// Result:   15:11:18
4

3 に答える 3

2

Change the format of function variable $format like

$format = '%d days %H:%I:%S'

public function dateTimeDifference($startDatetime, $endDatetime, $format = '%d days %H:%I:%S')
{
    $startDatetime2 = new DateTime($startDatetime, $this->timeZone);
    $endDatetime2 = new DateTime($endDatetime, $this->timeZone);
    $interval = $startDatetime2->diff($endDatetime2);

    return $interval->format($format);

}

$startDatetime = '2013-09-10 07:15:48 pm';
$endDatetime = '2013-09-15 10:27:06 am'; 

echo dateTimeDifference($startDatetime, $endDatetime);

If you want to convert the days to hours then try this,

function dateTimeDifference($startDatetime, $endDatetime, $format = '%H:%I:%S')
{
    $startDatetime2 = new DateTime($startDatetime);
    $endDatetime2 = new DateTime($endDatetime);
    $interval = $startDatetime2->diff($endDatetime2);
    $d=$interval->format('%d');
    $format=$interval->format($format);
    $f=explode(':',$format);
    $td=$d*24;
    return $time=($f[0]+$td).':'.$f[1].':'.$f[2];

}

$startDatetime = '2013-09-10 07:15:48 pm';
$endDatetime = '2013-09-15 10:27:06 am'; 

echo dateTimeDifference($startDatetime, $endDatetime);
// 111:11:18
于 2013-09-15T15:39:44.783 に答える
1

これは、差を時間、分、秒である %H:%i:%s としてフォーマットしているためです。日数を取得するには、%Dパーツが必要です。

日数を時間に変換する場合は、それに対して独自の計算を実行し、時間の部分が含まれないように形式を変更する必要があります。

public function dateTimeDifference($startDatetime, $endDatetime, $format = '%I:%S')
{
    $startDatetime2 = new DateTime($startDatetime, $this->timeZone);
    $endDatetime2 = new DateTime($endDatetime, $this->timeZone);
    $interval = $startDatetime2->diff($endDatetime2);

    $hours = $interval->format("%H") + ($interval->format("%d") * 24);
    return $hours . ':' . $interval->format($format);
}
于 2013-09-15T15:52:12.900 に答える
1

最善かつ最も簡単な方法は、 $interval -> h を上書きすることです

public function dateTimeDifference($startDatetime, $endDatetime, $format = '%H:%I:%S')
{
    $startDatetime2 = new DateTime($startDatetime, $this->timeZone);
    $endDatetime2 = new DateTime($endDatetime, $this->timeZone);
    $interval = $startDatetime2->diff($endDatetime2);
    $interval -> h += 24 * $interval -> days;

    return $interval->format($format);

}
于 2013-09-15T16:01:44.323 に答える