2008-09-04 2 views
34

Мне нужен первый и последний день месяца в формате ГГГГ-ММ-ДД, указанный только месяц и год. Есть ли хороший и простой способ сделать это?В PHP есть ли простой способ получить первую и последнюю дату месяца?

+9

Я чувствую себя глупо просить в первый день месяца ....: \ – 2008-09-04 12:22:42

ответ

64
$first = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year)); 
$last = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year)); 

См. date() в документации PHP.

+1

, что «1» после $ в месяц? – FosAvance 2013-12-09 22:13:44

5

Первый день всегда ГГГГ-ММ-01, не так ли? Пример: date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))

Последнего день предыдущий день первого день следующего месяца:

$date = new DateTime("2008-09-01"); 
$date->modify("-1 day"); 
echo $date->format("Y-m-d"); 
3

Первый день месяца всегда 1. Так будет

YYYY-MM-01 

в последний день может быть рассчитан как:

<?php 
    $num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31 
    echo "There was $num days in August 2003"; 
?> 
2

OK, сначала мертвый легко.

date ('Y-m-d', mktime(0,0,0,MM,01,YYYY)); 

Последнее немного сложнее, но не очень.

date ('Y-m-d', mktime(0,0,0,MM + 1,-1,YYYY)); 

Если я помню PHP дата вещи правильно ...

** редактировать - Гах! Избитый ему около миллиона раз ...

Edit патента:

Последнего день должен был

date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 
0

Кстати @ZombieSheep решения

date ('Y-m-d', mktime(0,0,0,$MM + 1,-1,$YYYY)); 

не работает это должно быть

date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 

Конечно, принятое решение Михала Слаби является самым простым.

0

Просто чтобы убедиться, что я не пропускал любые свободные концы:

$startDay = 1; 

if (date("m") == 1) { 
    $startMonth = 12; 
    $startYear = date("Y") - 1; 

    $endMonth = 12; 
    $endYear = date("Y") - 1; 
} 
else { 
    $startMonth = date("m") - 1; 
    $startYear = date("Y"); 

    $endMonth = date("m") - 1; 
    $endYear = date("Y"); 
} 

$endDay = date("d") - 1; 

$startDate = date('Y-m-d', mktime(0, 0, 0, $startMonth , $startDay, $startYear)); 
$endDate = date('Y-m-d', mktime(0, 0, 0, $endMonth, $endDay, $endYear)); 
2
<?php 
echo "Month Start - " . $monthStart = date("Y-m-1") . "<br/>"; 
$num = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); 
echo "Monthe End - " . $monthEnd = date("Y-m-".$num); 
?> 
0

Самый простой способ сделать это с помощью PHP является

$dateBegin = strtotime("first day of last month"); 
$dateEnd = strtotime("last day of last month"); 

echo date("MYDATEFORMAT", $dateBegin); 
echo "<br>";   
echo date("MYDATEFORMAT", $dateEnd); 

Или на прошлой неделе

if (date('N', time()) == 7) { 
$dateBegin = strtotime("-2 weeks Monday"); 
$dateEnd = strtotime("last Sunday"); 
} else { 
$dateBegin = strtotime("Monday last week"); 
$dateEnd = strtotime("Sunday last week"); 
} 

Или в прошлом году

$dateBegin = strtotime("1/1 last year"); 
$dateEnd = strtotime("12/31 this year"); 
0

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

$numdays = date('t', mktime(0, 0, 0, $m, 1, $Y)); 
0

Пример; Я хочу получить первый и последний день текущего месяца.

$month = (int) date('F'); 
$year = (int) date('Y'); 

date('Y-m-d', mktime(0, 0, 0, $month + 1, 1, $year)); //first 
date('Y-m-d', mktime(0, 0, 0, $month + 2, 0, $year)); //last 

Когда вы запускаете это, например, на дату 2015-01-09, первое и последнее значения будут последовательно;

2015-01-01 
2015-01-31 

Протестировано.

0

От here(get next month last day), который помечается как дублированный, поэтому я не могу добавить комментарий, но люди могут получить плохие ответы оттуда.

Correct один за последний день следующего месяца:

echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-t')); 

Correct один за первый день следующего месяца:

echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-01')); 

код, как это будет обеспечивать марта с января, так что это не то, что можно было ожидать.

echo ((new DateTime())->modify('+1 month')->format('Y-m-t'));

Смежные вопросы