2008-09-04 10 views

Odpowiedz

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)); 

Zobacz date() w dokumentacji PHP.

+1

co jest „1” po $ miesięcznie? – FosAvance

+0

nie zdawałem sobie sprawy, że możesz stworzyć takie błyskotliwe rozwiązanie, dodając "t". Czyste i proste. – Limon

5

Pierwszy dzień to zawsze RRRR-MM-01, prawda? Przykład: date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))

Ostatni dzień poprzedniego dnia następnego miesiąca za pierwszym dniu:

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

Pierwszy dzień miesiąca jest zawsze 1. Tak będzie stać

YYYY-MM-01 

się Ostatni dzień można obliczyć jako:

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

OK, najpierw nie jest łatwo.

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

Ostatni jest nieco trudniejszy, ale niewiele.

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

Jeśli Pamiętam moją datę PHP rzeczy poprawnie ...

** edit - Gah! Pobity do niego o milion razy ...

Edit Pat:

Ostatni dzień powinien być

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

Nawiasem mówiąc @ZombieSheep rozwiązanie

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

nie działa powinien być

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

Oczywiście przyjęte przez Michała Słaby rozwiązanie jest najprostsze.

0

Wystarczy, aby upewnić się, że nie przegap żadnych luźnych końców:

$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

Najłatwiej to zrobić z PHP jest

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

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

lub ostatni tydzień

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"); 
} 

Lub ostatni rok

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

spróbować uzyskać liczbę dni w miesiącu:

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

przykładu; Chcę dostać pierwszy dzień i ostatni dzień bieżącego miesiąca.

$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 

Po uruchomieniu tego na przykład w dniu 2015-01-09, pierwsza i ostatnia wartość będą sekwencyjnie;

2015-01-01 
2015-01-31 

Testowany.

0

Od here(get next month last day) oznaczona jako powielona, ​​więc nie mogę tam dodać komentarza, ale ludzie mogą uzyskać złe odpowiedzi.

Prawidłowe jeden dla ostatniego dnia następnego miesiąca:

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

Prawidłowe jeden do pierwszego dnia następnego miesiąca:

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

kod jak to będzie zapewnienie marca od stycznia, więc to nie to, co jest można się było spodziewać.

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

Powiązane problemy