2017-12-22 4 views
-1

2日間の日数を計算する方法はどのようにすればよいですか?PHPで指定された2日間の日数の差を計算する方法

たとえば、月曜日から木曜日までの日数を知りたいとします。 だから私はこれをこのように計算した。

配列を作成し、月曜日と木曜日の値の違いを確認します。 1 - 4 = -3です。マイナス記号を無視すると、3が得られます。現在の日付に3を追加すると、明らかに木曜日の日付になります。私が働くことができないのは、SundayWednesdayの間の日数を計算する必要がある場合です。上記の手法を適用すると、現在の日付に4日を追加すると7 - 3 = 4が得られます。それでは、間違いなくWednesdayを取得する予定はありません。誰も助けてくれますか?リンクされたリストや何を適用する必要はありません。助けが必要。

+0

日の選択ロジックが間違っています。日の違いは正しい。あなたが違いを探しているなら、それはまさにあなたが得るものです。 4への言及は正しいです、それはそれらの2日間の違いです。あなたはここで遂行しようとしていることは何ですか?より具体的になりますか? –

+0

私たちは文字列の形で2つの入力を得ると仮定します。第1は "日曜日"で第2は "木曜日"どのように日曜日と "木曜日"の間の日数を計算するのですか? –

答えて

-2
function format($a, $b) 
{ 
    if (strtotime($a) > strtotime($b)) list($a, $b) = [$b, $a]; 
    $start = strtotime($a); 
    $stop = strtotime($b); 
    $extend = ($stop - $start)/86400; 
    $result['extends'] = $extend; 
    if ($extend < 7) { 
     $result['daily'] = $extend; 
    } elseif ($extend <= 31) { 
     if ($stop == strtotime($a . '+1 month')) { 
      $result['monthly'] = 1; 
     } else { 
      $w = floor($extend/7); 
      $d = ($stop - strtotime($a . '+' . $w . ' week'))/86400; 
      $result['weekly'] = $w; 
      $result['daily'] = $d; 
     } 
    } else { 
     $y = floor($extend/365); 
     if ($y >= 1) { 
      $start = strtotime($a . '+' . $y . 'year'); 
      $a = date('Y-m-d', $start); 
      if ($start > $stop) { 
       $a = date('Y-m-d', strtotime($a . '-1 month')); 
       $m = 11; 
       $y--; 
      } 
      $extend = ($stop - strtotime($a))/86400; 
     } 
     if (isset($m)) { 
      $w = floor($extend/7); 
      $d = $extend - $w * 7; 
     } else { 
      $m = isset($m) ? $m : round($extend/30); 
      $stop >= strtotime($a . '+' . $m . 'month') ? $m : $m--; 
      if ($stop >= strtotime($a . '+' . $m . 'month')) { 
       $d = $w = ($stop - strtotime($a . '+' . $m . 'month'))/86400; 
       $w = floor($w/7); 
       $d = $d - $w * 7; 
      } 
     } 
     $result['yearly'] = $y; 
     $result['monthly'] = $m; 
     $result['weekly'] = $w; 
     $result['daily'] = isset($d) ? $d : NULL; 
    } 

    return array_filter($result); 
} 
+0

Broはあなたにも私の質問を読まれましたか?はいの場合、コードを使用して日差を計算する方法を教えてください。 –

0

あなたの感情的にあなたの配列に接続されていない場合、このメソッドはstrtotimeとdateを使用して動作します。
次の開始日(日曜日)に開始点を作成し、それを使用して次の終了日(水曜日)のUnixを取得します。

その後、私はちょうど終わりから始まりを差し引いて、2日間に何秒間あるかを残して、それを86400で割ります。そして、それらの間に日数があります。

$startday ="Sunday"; 
$endday = "Wednesday"; 
$start = strtotime("next $startday"); 
$end = strtotime(date("Y-m-d", $start) . " Next $endday"); 
Echo ($end-$start)/86400; 

https://3v4l.org/VYjlM

1

1日目は2日目の値よりも大きい場合は、7によって相殺する必要があり、これは

IN-なりますthis-

function dayDiff($start,$end){ 
    $weekDays = [ 
      'Mon' => 1, 
      'Tue' => 2, 
      'Wed' => 3, 
      'Thu' => 4, 
      'Fri' => 5, 
      'Sat' => 6, 
      'Sun' => 7, 
    ]; 
    return ($weekDays[$start] < $weekDays[$end]) ? $weekDays[$end]-$weekDays[$start] : abs($weekDays[$start]-$weekDays[$end]-7); 
} 

のようなものを試してみてください

echo "Mon -> Thu : ".dayDiff("Mon","Thu"); //returns 3 
echo "Sun -> Wed : ".dayDiff("Sun","Wed"); //returns 3 
echo "Sat -> Wed : ".dayDiff("Sat","Wed"); //returns 4 

ここの例 - https://3v4l.org/CrYJD

+0

貴重な時間をありがとう! –

関連する問題