Làm cách nào để tìm ngày đầu tiên và ngày cuối cùng trong tháng bằng PHP? Ví dụ, hôm nay là ngày 21 tháng 4 năm 2010; Tôi muốn tìm ngày 1 tháng 4 năm 2010 và ngày 30 tháng 4 năm 2010.
Câu trả lời:
Cách dễ nhất là sử dụng date
, cho phép bạn trộn các giá trị được mã hóa cứng với các giá trị được trích xuất từ dấu thời gian. Nếu bạn không đưa ra dấu thời gian, nó sẽ giả định là ngày và giờ hiện tại.
// Current timestamp is assumed, so these find first and last day of THIS month
$first_day_this_month = date('m-01-Y'); // hard-coded '01' for first day
$last_day_this_month = date('m-t-Y');
// With timestamp, this gets last day of April 2010
$last_day_april_2010 = date('m-t-Y', strtotime('April 21, 2010'));
date()
tìm kiếm chuỗi mà nó đưa ra, chẳng hạn như 'm-t-Y'
, cho các ký hiệu cụ thể và nó thay thế chúng bằng các giá trị từ dấu thời gian của nó. Vì vậy, chúng tôi có thể sử dụng các ký hiệu đó để trích xuất các giá trị và định dạng mà chúng tôi muốn từ dấu thời gian. Trong các ví dụ trên:
Y
cung cấp cho bạn năm 4 chữ số từ dấu thời gian ('2010')m
cung cấp cho bạn tháng số tính từ dấu thời gian, với số 0 ở đầu ('04')t
cung cấp cho bạn số ngày trong tháng của dấu thời gian ('30')Bạn có thể sáng tạo với điều này. Ví dụ: để có được giây đầu tiên và giây cuối cùng của tháng:
$timestamp = strtotime('February 2012');
$first_second = date('m-01-Y 00:00:00', $timestamp);
$last_second = date('m-t-Y 12:59:59', $timestamp); // A leap year!
Xem http://php.net/manual/en/ Chức năng.date.php để biết các ký hiệu khác và biết thêm chi tiết.
Đơn giản
Tham khảo - http://www.php.net/manual/en/ Chức năng.date.php
<?php
echo 'First Date = ' . date('Y-m-01') . '<br />';
echo 'Last Date = ' . date('Y-m-t') . '<br />';
?>
Bạn có thể sử dụng chức năng ngày để biết có bao nhiêu ngày trong tháng.
// Get the timestamp for the date/month in question.
$ts = strtotime('April 2010');
echo date('t', $ts);
// Result: 30, therefore, April 30, 2010 is the last day of that month.
Hy vọng rằng sẽ giúp.
CHỈNH SỬA: Sau khi đọc câu trả lời của Luis, tôi nhận ra rằng bạn có thể muốn nó ở đúng định dạng (YY-mm-dd). Nó có thể hiển nhiên, nhưng không hại khi đề cập đến:
// After the above code
echo date('Y-m-t', $ts);
Điều này sẽ cung cấp cho bạn ngày cuối cùng của tháng:
function lastday($month = '', $year = '') {
if (empty($month)) {
$month = date('m');
}
if (empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
$result = strtotime('-1 second', strtotime('+1 month', $result));
return date('Y-m-d', $result);
}
Và ngày đầu tiên:
function firstDay($month = '', $year = '')
{
if (empty($month)) {
$month = date('m');
}
if (empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
return date('Y-m-d', $result);
}
Đối với ngày sử dụng tháng và năm cụ thể () như ngôn ngữ tự nhiên như sau
$first_date = date('d-m-Y',strtotime('first day of april 2010'));
$last_date = date('d-m-Y',strtotime('last day of april 2010'));
// Isn't it simple way?
nhưng cho tháng hiện tại
$first_date = date('d-m-Y',strtotime('first day of this month'));
$last_date = date('d-m-Y',strtotime('last day of this month'));
Nếu bạn muốn tìm ngày đầu tiên và ngày cuối cùng từ biến ngày được chỉ định thì bạn có thể làm như sau:
$date = '2012-02-12';//your given date
$first_date_find = strtotime(date("Y-m-d", strtotime($date)) . ", first day of this month");
echo $first_date = date("Y-m-d",$first_date_find);
$last_date_find = strtotime(date("Y-m-d", strtotime($date)) . ", last day of this month");
echo $last_date = date("Y-m-d",$last_date_find);
Đối với ngày hiện tại, chỉ cần sử dụng đơn giản này
$first_date = date('Y-m-d',strtotime('first day of this month'));
$last_date = date('Y-m-d',strtotime('last day of this month'));
Ở định dạng đơn giản
$curMonth = date('F');
$curYear = date('Y');
$timestamp = strtotime($curMonth.' '.$curYear);
$first_second = date('Y-m-01 00:00:00', $timestamp);
$last_second = date('Y-m-t 12:59:59', $timestamp);
Đối với tháng tiếp theo, hãy thay đổi $ curMonth thành $ curMonth = date ('F', strtotime ("+ 1 tháng"));