0

こんにちは、MSSQL データベースに値が time(7) として保存されています。

job_start job_end

私はphpを使用してこれら2つの時間の違いを解決しようとしています.次のコードがあります

$start = $model->job_start; 
$end = $model->job_end;
$diff = date( "h:i:s", strtotime($end) - strtotime($start) ) ; 
echo $diff ;

ただし、出力は

03:06:00

それよりも

00:06:00

ところで、違いは 6 分 (360 秒) ですが、保存できるように正しい形式でこれを取得するのを手伝ってくれる人はいますか?

この質問は重複としてマークされていますが、これは日付関数を使用する際の特定のタイムゾーンの質問に対処するため、別の質問です。と、そのように答えられています。

編集

私がマークしたコードは、私が尋ねた質問に答えましたが、次のように余分な計算を追加しようとしています

$start = $model->job_start;
$end = $model->job_end;

$total = $model->customer->total_time;
//adding time difference to total time used for that customer
$dt =   strtotime($total) +  strtotime($end) - strtotime($start);
$hours = floor($dt / 3600);
$minutes = floor($dt / 60) - $hours * 60;
$seconds = $dt - $hours * 3600 - $minutes * 60;


// Padded values
$hours = str_pad($hours, 2, STR_PAD_LEFT, '0');
$minutes = str_pad($minutes, 2, STR_PAD_LEFT, '0');
$seconds = str_pad($seconds, 2, STR_PAD_LEFT, '0');
$output = "{$hours}:{$minutes}:{$seconds}" ;

//display 
echo '<br> Start time : '. $start;
echo '<br> End time : '. $end;
echo '<br> total time + time difference : '. $output;
echo '<br> Total time for Customer : '. CHtml::encode($model->customer->total_time);

合計時間の差を合計時間変数に追加しようとしていますが、出力がエコーされると、この表示が得られます

Start time : 11:45:00.0000000
End time   : 12:45:00.0000000
total time + time difference : 382015:00:00
Total time for Customer : 09:00:00.0000000

合計時間 + 時間差の前に余分な桁があることに注意してください。おそらく私の側の単純な間違いですが、私にはわかりません。助けていただければ幸いです

4

2 に答える 2

4

なぜデータベースでこれをしないのですか

SELECT TIMESTAMPDIFF(SECOND, job_start, job_end);

その方が速く、他の人があなたがやろうとしていることをより明確に見ることができます.

于 2013-07-30T20:28:22.940 に答える
1

まず第一にdate、Unix エポック (1970-01-01 00:00:00) からの日付を与えるので、そこに見られる奇妙な 3 時間の差はあなたのタイムゾーンです。時間、分、秒を個別に解析する必要があります。

<?php
$end = '2013-07-30 23:27:00';
$start = '2013-07-30 21:23:56';

$dt = strtotime($end) - strtotime($start);
$hours = floor($dt / 3600);
$minutes = floor($dt / 60) - $hours * 60;
$seconds = $dt - $hours * 3600 - $minutes * 60;

// Padded values
$hours = str_pad($hours, 2, STR_PAD_LEFT, '0');
$minutes = str_pad($minutes, 2, STR_PAD_LEFT, '0');
$seconds = str_pad($seconds, 2, STR_PAD_LEFT, '0');

$output = "{$hours}:{$minutes}:{$seconds}";
于 2013-07-30T20:30:28.663 に答える