php недели между 2 датами

hi, как не найти ни одной недели и каждой даты понедельника между 2 датами. для ex 10-07-2009 по сегодняшний день.

Примечание. Учитывайте также високосный год и другие ограничения, связанные с датой.

Related of "php недели между 2 датами"

echo datediff('ww', '9 July 2003', '4 March 2004', false); 

Найдите функцию на сайте ниже: http://www.addedbytes.com/code/php-datediff-function/

ОБНОВИТЬ

Ссылка сломана (сентябрь 2017), поэтому функция ниже вытащена из webarchive:

 <?php /** * @param $interval * @param $datefrom * @param $dateto * @param bool $using_timestamps * @return false|float|int|string */ function datediff($interval, $datefrom, $dateto, $using_timestamps = false) { /* $interval can be: yyyy - Number of full years q - Number of full quarters m - Number of full months y - Difference between day numbers (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".) d - Number of full days w - Number of full weekdays ww - Number of full weeks h - Number of full hours n - Number of full minutes s - Number of full seconds (default) */ if (!$using_timestamps) { $datefrom = strtotime($datefrom, 0); $dateto = strtotime($dateto, 0); } $difference = $dateto - $datefrom; // Difference in seconds $months_difference = 0; switch ($interval) { case 'yyyy': // Number of full years $years_difference = floor($difference / 31536000); if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) { $years_difference--; } if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) { $years_difference++; } $datediff = $years_difference; break; case "q": // Number of full quarters $quarters_difference = floor($difference / 8035200); while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) { $months_difference++; } $quarters_difference--; $datediff = $quarters_difference; break; case "m": // Number of full months $months_difference = floor($difference / 2678400); while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) { $months_difference++; } $months_difference--; $datediff = $months_difference; break; case 'y': // Difference between day numbers $datediff = date("z", $dateto) - date("z", $datefrom); break; case "d": // Number of full days $datediff = floor($difference / 86400); break; case "w": // Number of full weekdays $days_difference = floor($difference / 86400); $weeks_difference = floor($days_difference / 7); // Complete weeks $first_day = date("w", $datefrom); $days_remainder = floor($days_difference % 7); $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder? if ($odd_days > 7) { // Sunday $days_remainder--; } if ($odd_days > 6) { // Saturday $days_remainder--; } $datediff = ($weeks_difference * 5) + $days_remainder; break; case "ww": // Number of full weeks $datediff = floor($difference / 604800); break; case "h": // Number of full hours $datediff = floor($difference / 3600); break; case "n": // Number of full minutes $datediff = floor($difference / 60); break; default: // Number of full seconds (default) $datediff = $difference; break; } return $datediff; } 

Вот альтернативное решение, использующее DateTime: –

 function datediffInWeeks($date1, $date2) { if($date1 > $date2) return datediffInWeeks($date2, $date1); $first = DateTime::createFromFormat('m/d/Y', $date1); $second = DateTime::createFromFormat('m/d/Y', $date2); return floor($first->diff($second)->days/7); } var_dump(datediffInWeeks('1/2/2013', '6/4/2013'));// 21 

Посмотрите, как работает

 $diff = strtotime($dateto, 0) - strtotime($datefrom, 0); echo floor($diff / 604800); 

Следующая функция вычисляет «разговорные недели» между двумя временными отметками (например, понедельник на следующей неделе, если вы находитесь в субботу).

 function days_between($datefrom,$dateto){ $fromday_start = mktime(0,0,0,date("m",$datefrom),date("d",$datefrom),date("Y",$datefrom)); $diff = $dateto - $datefrom; $days = intval( $diff / 86400 ); // 86400 / day if( ($datefrom - $fromday_start) + ($diff % 86400) > 86400 ) $days++; return $days; } function weeks_between($datefrom, $dateto) { $day_of_week = date("w", $datefrom); $fromweek_start = $datefrom - ($day_of_week * 86400) - ($datefrom % 86400); $diff_days = days_between($datefrom, $dateto); $diff_weeks = intval($diff_days / 7); $seconds_left = ($diff_days % 7) * 86400; if( ($datefrom - $fromweek_start) + $seconds_left > 604800 ) $diff_weeks ++; return $diff_weeks; } 

Эта работа великолепна

 function weeks_between($datefrom, $dateto) { $datefrom = DateTime::createFromFormat('d/m/YH:i:s',$datefrom); $dateto = DateTime::createFromFormat('d/m/YH:i:s',$dateto); $interval = $datefrom->diff($dateto); $week_total = $interval->format('%a')/7; return floor($week_total); } weeks_between("25/02/2000 11:30:00","05/06/2015 11:29:59") 

Чтобы проверить полный код Нажмите здесь

Все номера недели между двумя датами в PHP

getNoOfWeek () вернет массив недели нет. с годом. Вы можете изменить форматирование этого массива из week_text_alter ().

 function getNoOfWeek($startDate, $endDate){ // convert date in valid format $startDate = date("Ymd", strtotime($startDate)); $endDate = date("Ymd", strtotime($endDate)); $yearEndDay = 31; $weekArr = array(); $startYear = date("Y", strtotime($startDate)); $endYear = date("Y", strtotime($endDate)); if($startYear != $endYear) { $newStartDate = $startDate; for($i = $startYear; $i <= $endYear; $i++) { if($endYear == $i) { $newEndDate = $endDate; } else { $newEndDate = $i."-12-".$yearEndDay; } $startWeek = date("W", strtotime($newStartDate)); $endWeek = date("W", strtotime($newEndDate)); if($endWeek == 1){ $endWeek = date("W", strtotime($i."-12-".($yearEndDay-7))); } $tempWeekArr = range($startWeek, $endWeek); array_walk($tempWeekArr, "week_text_alter", array('pre' => 'Week ', 'post' => " '". substr($i, 2, 2) )); $weekArr = array_merge($weekArr, $tempWeekArr); $newStartDate = date("Ymd", strtotime($newEndDate . "+1 days")); } } else { $startWeek = date("W", strtotime($startDate)); $endWeek = date("W", strtotime($endDate)); $endWeekMonth = date("m", strtotime($endDate)); if($endWeek == 1 && $endWeekMonth == 12){ $endWeek = date("W", strtotime($endYear."-12-".($yearEndDay-7))); } $weekArr = range($startWeek, $endWeek); array_walk($weekArr, "week_text_alter", array('pre' => 'Week ', 'post' => " '". substr($startYear, 2, 2))); } $weekArr = array_fill_keys($weekArr, 0); return $weekArr; } function week_text_alter(&$item1, $key, $prefix) { $item1 = $prefix['pre']. $item1 . $prefix['post']; } Output 1 - $weekArr = getNoOfWeek('2014-01-01', '2014-02-10'); Array ( [Week 1 '14] => 0 [Week 2 '14] => 0 [Week 3 '14] => 0 [Week 4 '14] => 0 [Week 5 '14] => 0 [Week 6 '14] => 0 [Week 7 '14] => 0 ) Output 2 - $weekArr = getNoOfWeek('2013-12-01', '2014-02-10'); Array ( [Week 48 '13] => 0 [Week 49 '13] => 0 [Week 50 '13] => 0 [Week 51 '13] => 0 [Week 52 '13] => 0 [Week 1 '14] => 0 [Week 2 '14] => 0 [Week 3 '14] => 0 [Week 4 '14] => 0 [Week 5 '14] => 0 [Week 6 '14] => 0 [Week 7 '14] => 0 ) 

Надеюсь, что это поможет вам.

PHP число недель между двумя датами

Ниже приведено решение (исправленное решение по одному вопросу, заданному в post- https://stackoverflow.com/questions/27560850/php-number-of-week-between-2-dates-issue ), чтобы узнать, сколько недель между диапазоном дат.

Поскольку в приведенном ниже решении используется разность дат, для включения начальной даты в неделю нужно использовать функцию пола, а для включения даты окончания дня следует использовать ceil, тогда только она возвращает правильное количество недель

 $strtDate = '2014-01-01'; $endDate = '2015-03-17'; $startDateWeekCnt = round(floor( date('d',strtotime($strtDate)) / 7)) ; // echo $startDateWeekCnt ."\n"; $endDateWeekCnt = round(ceil( date('d',strtotime($endDate)) / 7)) ; //echo $endDateWeekCnt. "\n"; $datediff = strtotime(date('Y-m',strtotime($endDate))."-01") - strtotime(date('Y-m',strtotime($strtDate))."-01"); $totalnoOfWeek = round(floor($datediff/(60*60*24)) / 7) + $endDateWeekCnt - $startDateWeekCnt ; echo $totalnoOfWeek ."\n";