1

すべての合計を取得するためにタイムスタンプを一緒に追加する関数を作成しようとしています。例:11:30 + 12:00 + 15:35 = 39:05これを実現する方法がわかりません。私が試した以下のコードを含めましたが、望ましい結果が得られません:

$TotalTime = strtotime($data['TotalSunday']) + strtotime($data['TotalMonday']) 
    + strtotime($data['TotalTuesday'])
    + strtotime($data['TotalWednesday'])    + strtotime($data['TotalThursday'])
    + strtotime($data['TotalFriday']) + strtotime($data['TotalSaturday']);
    $data['TotalTime'] = gmdate("h:i", $TotalTime);
4

4 に答える 4

7

問題は次のとおりです。「時間」を追加したいのですが、実際には「日付」の合計を作成しています。strtotime2つのパラメーターが必要です。#1は日付、#2はオフセットです(指定されていない場合は「現在」です)。

これは単なるハックであり、誰かがそのように使用するかどうかはわかりませんが、機能します。

<?php

    $time1 = strtotime("00:25Z", 0);
    $time2 = strtotime("23:20:05Z", 0);

    $sumTime = $time1 + $time2;

    $hours = $sumTime / 3600;
    $minutes = ($sumTime % 3600) / 60;

    echo sprintf("%d:%d", $hours, $minutes); // Outputs: 23:45

?>

2番目のパラメーターを0に設定し、datetimeパラメーターに追加のZ(Zulu時間またはUTCの場合)を指定することにより、23:59:59までの時間が秒単位で正しく解析されます。

したがって、本当にstrtotimeに依存したい場合は、そのように使用してください。

于 2013-01-22T08:21:06.130 に答える
0

このようなことを試すことができます(DateTimeとDateIntervalを少し試してみましたが、これらのクラスはPHP5.2以降でのみ使用できるので注意してください。

$interval1 = new DateInterval('P0000-00-00T10:00:00');
$interval2 = new DateInterval('P0000-00-00T11:00:00');
$interval3 = new DateInterval('P0000-00-00T03:45:00');
// format:                     YYYYY-MM-DDTHH:MM:SS

$date = new DateTime('00:00:00');
$date2 = clone $date;
$date2->add($interval1);
$date2->add($interval2);
$date2->add($interval3);

echo "Sum between the intervals:", $date2->diff($date)->format("%D:%H:%I"); // prints 01:00:45
// OR you can do the following
$diff = $date2->getTimestamp() - $date->getTimestamp(); // difference in seconds
// floor($diff / 3600) is the number of hours, for example
于 2013-01-22T08:17:10.977 に答える
0

strtotimeタイミングを追加するとき、特に結果を。のみとして表示する場合は、古いphp /date関数を使用できませんhours:minutes。たとえば、24時間以上経過すると、「時計」がリセットされます。

あなたがすべきことは、合計分数(またはそれが必要な場合は秒数)を計算し、必要に応じて結果をフォーマットすることです。

後半のコード例については、PHPを使用して分数を時間と分に変換するをご覧ください。

于 2013-01-22T08:16:18.950 に答える
0

24時間後の日付変更を避けるために、私はこのアプローチを使用します。時間形式は常にhh:mm(:ss)ですが、それ以前の日付はありません。mySQLの日付フィールドを操作するのに便利です。

$timeString[] = array ('11:30', '1:00' , ...);

foreach ( $timeString as mytime) {
  $time         = explode(':' , $mytime);
  $tMin     +=   $time[1]   ;
  $tHour    +=   $time[0]   ;
}
    
$tHour  += floor ( $tMin / 60   ) ;
$tMin   =   $tMin % 60  ;

echo "total time: " . $tHour .':'.$tMin ;
于 2021-10-29T14:56:07.627 に答える