2008-09-04 53 views

Trả lời

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

Xem date() trong tài liệu PHP.

+1

những gì là "1" sau khi $ tháng? – FosAvance

+0

không nhận ra bạn có thể tạo ra một giải pháp sáng chói như vậy chỉ bằng cách thêm "t". Sạch sẽ và đơn giản. – Limon

5

Ngày đầu tiên luôn là YYYY-MM-01, phải không? Ví dụ: date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))

Ngày cuối cùng là ngày hôm trước của ngày đầu tiên vào tháng tới:

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

Ngày đầu tiên của tháng luôn là 1. Vì vậy, nó sẽ trở thành

YYYY-MM-01 

sự ngày cuối cùng có thể được tính như sau:

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

OK, trước hết là dễ dàng.

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

Cuối cùng hơi phức tạp hơn một chút, nhưng không nhiều.

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

Nếu tôi nhớ PHP của tôi ngày thứ một cách chính xác ...

** chỉnh sửa - Gah! Đánh đến nó khoảng một triệu lần ...

Sửa bởi Pat:

Ngày cuối cùng cần phải có được

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

Bằng cách này @ZombieSheep giải pháp

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

không hoạt động phải là

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

Tất nhiên giải pháp được chấp nhận của Michał Słaby là đơn giản nhất.

0

Chỉ cần để xác minh rằng tôi đã không bỏ lỡ bất kỳ rỗi:

$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

Cách dễ nhất để làm điều này với PHP là

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

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

Hoặc tuần trước

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

Hoặc năm ngoái

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

thử loại này để có được số ngày trong tháng:

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

Ví dụ; Tôi muốn có ngày đầu tiên và ngày cuối cùng của tháng hiện tại.

$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 

Khi bạn chạy ví dụ này vào ngày 2015-01-09, giá trị đầu tiên và cuối cùng sẽ được tuần tự;

2015-01-01 
2015-01-31 

Đã kiểm tra.

0

Từ here(get next month last day) được đánh dấu là trùng lặp, vì vậy tôi không thể thêm nhận xét ở đó, nhưng mọi người có thể nhận được câu trả lời không tốt từ đó.

một đúng cho ngày cuối cùng của tháng tiếp theo:

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

một đúng cho ngày đầu tiên của tháng tiếp theo:

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

Mã như thế này sẽ được cung cấp tháng từ tháng giêng, vì vậy đó không phải là những gì có thể được mong đợi.

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

Các vấn đề liên quan