получить количество недель, прошедших месяц и год php - PullRequest
4 голосов
/ 27 января 2012

я знаю, что у меня много вопросов, подобных этому, но я не знаю, слеп ли я или что, но я не могу найти ответ, который соответствует моему вопросу, так что вот оно.

яУ меня есть 2 поля со списком - month и year, мне нужна функция, которая выводит мне номера недели из выбранного месяца и года.

пример:

Я выбираю дату 02/2012 (м / гггг), и в комбинированном списке появятся недели, которые принадлежат выбранному мной месяцу.( недель от года ).

недель:

5, 6, 7, 8, 9


Моя главная цель - перейти к другой функции на неделечисло, чтобы получить день, который есть на этой неделе, например, результаты этой функции:

$week_number = 40;
$year        = 2012;

if($week_number < 10){
   $week_number = "0".$week_number;
}

for($day=1; $day<=7; $day++)
{
    echo date('m/d/Y', strtotime($year."W".$week_number.$day))."<br/>";
}

не знаю, объясню ли я сам, но любой вопрос моего гостя.

Спасибо.


резюме:

52 недели в году

Если я выберу месяц 2, функция должна вернуть 5, 6, 7, 8, 9.

Ответы [ 2 ]

12 голосов
/ 27 января 2012

Я думаю, вы должны быть в состоянии работать с этим?

$month = "2";
$year = "2012";

$beg = (int) date('W', strtotime("first thursday of $year-$month"));
$end = (int) date('W', strtotime("last  thursday of $year-$month"));

print(join(', ', range($beg, $end)));

OUTPUT

5, 6, 7, 8

Примечание

Этот код был неисправен и давал неверные результаты, пока не был исправлен 27 августа 2014 года.

Период времени, к которому относится неделя, определяется тем, где находится большинство (четыре или более) ее дней. Это проще всего определить, проверив, куда падает его четверг . Таким образом, первая и последняя недели месяца - это те, которые содержат его первый и последний четверги.

2 голосов
/ 27 января 2012

Сначала получите временную метку для 1-го числа месяца / года.И исходя из этого, получите номер недели первого дня.

Примерно так:

$year = "2012";
$mon = "02";

$tm = strtotime("$year-$mon-01");  # Substitue year and month 
$first_week_num = date("W", $tm); # Got the week number

И затем сделайте то же самое для последнего дня месяца.Для этого вы можете просто добавить 1 к месяцу (вам нужно сделать логику, если месяц равен 12 - где вам нужно добавить 1 к году).А затем вычтите 86400 (количество секунд в день).Таким образом, вы получите последний день месяца и не будете думать о том, сколько дней в этом месяце.

if($mon == 12) 
   $year++;
else
   $mon++;
$tm = strtotime("$year-$mon-01") - 86400;
$last_week_num = date("W", $tm);

И все недели от первой до последней недели - это то, что вам нужно:1009 *

for($i=$first_week_num; $i <= $last_week_num; $i++)
  print $i;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...