2016-01-11 2 views
3

У меня есть функция, которая Подсчитайте, сколько дней в течение 1 года, и я получил его на работу с понедельника по субботу, изменив переменную $week из:делает функции PHP считать определенный день

Monday - 6:Saturday, но он не будет работать когда я положил 7: Sunday.

может любой помочь. я не хватает какой-либо логики?

$year = 2016; 
$newyear = $year; 
$week = 0; 
$day = 0; 
$mo = 1; 
$days = array(); 
$i = 1; 

     while ($week != 7) { // here is where I change the 1-7 for days 
      $day++; 
      $week = date("w", mktime(0, 0, 0, $mo,$day, $year)); 
     } 

     array_push($days,date("r", mktime(0, 0, 0, $mo,$day, $year))); 
     while ($newyear == $year) { 
      $x = strtotime(date("r", mktime(0, 0, 0, $mo,$day, $year)) . "+" . $i . " week"); 
      $i++; 
      if ($year == date("Y",$x)) { 
      array_push($days,date("r", $x)); 
      } 
      $newyear = date("Y",$x); 
     } 

     print count($days); 

спасибо за помощь ура! и можно будет сразу подсчитать 2 года общих дней, например:

У меня есть дата, которая составляет 11 января 2016 года, и я хотел знать, сколько дней прошло с 11 января 2016 года по 11 января 2018 года, сколько понедельников есть.

спасибо!

+1

недель 0 (воскресенье) до 6 (суббота), см [руководство] (http://php.net /manual/en/function.date.php) –

+1

Работа со временем в php или на любом другом языке - это банда червей. Я предлагаю попробовать [Carbon] (https://github.com/briannesbitt/Carbon), который был специально создан для таких вещей. – Andrew

+0

Проверьте эти вопросы: [Поиск количества дней между двумя датами] (http://stackoverflow.com/questions/2040560/finding-the-number-of-days-between-two-dates) | [Как считать дни между двумя датами в PHP?] (Http://stackoverflow.com/questions/3653882/how-to-count-days-between-two-dates-in-php) | [найти число понедельника или понедельника между двумя датами?] (Http: // stackoverflow.com/questions/1653891/how-to-find-number-of-mondays-or-tuesdays-between-two-date) | [получить все понедельники в диапазоне дат] (http://stackoverflow.com/questions/7061802/php-function-for-get-all-mondays-within-date-range) – StoYan

ответ

2
$date_1 = strtotime("2016-01-11"); 
$date_2 = strtotime("2018-01-11"); 
$datediff = $date_2 - $date_1; 
echo floor($datediff/(60*60*24)); 

Modified:

Вы можете найти любого день недели между двумя датами. просто измените значение $ days [0];

В понедельник:

<?php 
$date_1 = $from = strtotime('2016-01-11'); 
$date_2 = strtotime('2018-01-11'); 
$days = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'); 
$count = 0; 
while ($date_1 < $date_2) { 
    if(date('l', $date_1) == $days[0]); 
    { 
    $count++; 
    } 
    $date_1 += 7 * 24 * 3600; 
} 
echo "From : ".date('Y-m-d',$from)." To : ".date('Y-m-d',$date_2)." has $count $days[0]"; 
?> 

ВЫВОД:

From : 2016-01-11 To : 2018-01-11 has 105 Monday 
2

Использование DateTime/DateInterval функции:

$datetime1 = new DateTime('2018-01-11'); 
$datetime2 = new DateTime('2016-01-11'); 
$interval = $datetime1->diff($datetime2); 
echo floor($interval->format('%a days')/7); // 104 

Или с помощью StrToTime ...

Вы также можете сделать это:

$startDate = strtotime('2016-01-11'); 
$endDate = strtotime('2018-01-11'); 
$totalWeeks = (($endDate - $startDate)/86400)/7; 
echo floor($totalWeeks); // rounds to 104 

Подробнее здесь:

DATEDIFF - http://php.net/manual/en/datetime.diff.php

DateInterval :: Формат - http://php.net/manual/en/dateinterval.format.php

Update ... как 'отладка' это легко для подсчета дня:

<?php 

$startDate = strtotime('2016-01-11'); 
$endDate = strtotime('2018-01-11'); 
$currentDate = $startDate; 

$count = 0; 
while ($currentDate <= $endDate) { 
    echo date('r', $currentDate) . "\n"; 
    $currentDate = strtotime('+1 week', $currentDate); 
    if ($currentDate<=$endDate) { 
     $count++; 
    } 
} 

echo $count . "\n"; 
+0

Мне нужно знать только конкретный день, например, сколько понедельников есть для тех двухлетних диапазонов ... – Boby

+0

Взгляните на мой новый ответ, чтобы узнать, отвечает ли он на ваш вопрос и дайте мне знать, если это сработает для вас – Clay

+0

Вы ищете счет между понедельниками? или вы хотите включить первый понедельник и последний понедельник? – Clay