Làm thế nào tôi có thể có được ngày cuối cùng của tháng trong PHP?
Được:
$a_date = "2009-11-23"
Tôi muốn 2009-11-30; và được đưa ra
$a_date = "2009-12-23"
Tôi muốn 2009-12-31.
Làm thế nào tôi có thể có được ngày cuối cùng của tháng trong PHP?
Được:
$a_date = "2009-11-23"
Tôi muốn 2009-11-30; và được đưa ra
$a_date = "2009-12-23"
Tôi muốn 2009-12-31.
Câu trả lời:
t
trả về số ngày trong tháng của một ngày nhất định (xem tài liệu chodate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
bạn có thể làm một cái gì đó như thế này:(new DateTime('2009-11-23'))->modify('last day of')
Mã sử dụng strtotime () sẽ thất bại sau năm 2038. (như được đưa ra trong câu trả lời đầu tiên trong chuỗi này) Ví dụ: hãy thử sử dụng như sau:
$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));
Nó sẽ đưa ra câu trả lời là: 1970-01-31
Vì vậy, thay vì strtotime, nên sử dụng chức năng DateTime. Mã sau sẽ hoạt động mà không có vấn đề Năm 2038:
$d = new DateTime( '2040-11-23' );
echo $d->format( 'Y-m-t' );
strtotime
mã cho tôi kết quả này: 2040-11-30
Tôi biết điều này hơi muộn một chút nhưng tôi nghĩ có một cách thanh lịch hơn để làm điều này PHP 5.3+
bằng cách sử dụng lớp DateTime :
$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');
$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
Ngoài ra còn có hàm PHP tích hợp cal_days_in_month () ?
"Hàm này sẽ trả về số ngày trong tháng của năm cho lịch được chỉ định." http://php.net/manual/en/feft.cal-days-in-month .
echo cal_days_in_month(CAL_GREGORIAN, 11, 2009);
// = 30
Điều này sẽ làm việc:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
Điều gì là sai - Thanh lịch nhất đối với tôi là sử dụng DateTime
Tôi tự hỏi tôi không nhìn thấy DateTime::createFromFormat
, một lót
$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");
Bạn có thể tạo một ngày cho ngày đầu tiên của tháng tiếp theo, sau đó sử dụng strtotime("-1 day", $firstOfNextMonth)
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
và mktime()
được khuyến khích bởi bec. các lỗi đã biết như xác định ngày ở rìa của các tháng và các bước tính toán năm nhuận. Vì DateTime
có sẵn, bạn nên sử dụng lớp này để tránh mọi vấn đề trong tương lai. Giống như đã nói nhiều lần trước tôi, cả hai chức năng này strtotime()
và mktime()
sẽ thất bại sau năm 2038. Đó là lý do tại sao tôi hạ cấp ...
Hãy thử điều này, nếu bạn đang sử dụng PHP 5.3+,
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Để tìm tháng tiếp theo vào ngày cuối cùng, hãy sửa đổi như sau,
$date->modify('last day of 1 month');
echo $date->format('Y-m-d');
và như thế..
Giải pháp của bạn là đây ..
$lastday = date('t',strtotime('today'));
31
cho September
những gì bạn biết là không chính xác.
Bạn có thể tìm thấy ngày cuối cùng của tháng một vài cách. Nhưng đơn giản là bạn có thể làm điều này bằng cách sử dụng hàm strtotime () và date () của PHP. Tôi tưởng tượng mã cuối cùng của bạn sẽ trông giống như thế này:
$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));
Nhưng nếu bạn đang sử dụng PHP> = 5.2 Tôi thực sự khuyên bạn nên sử dụng đối tượng DateTime mới. Ví dụ như dưới đây:
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Ngoài ra, bạn có thể giải quyết điều này bằng cách sử dụng chức năng của riêng bạn như dưới đây:
/**
* Last date of a month of a year
*
* @param[in] $date - Integer. Default = Current Month
*
* @return Last date of the month and year in yyyy-mm-dd format
*/
function last_day_of_the_month($date = '')
{
$month = date('m', strtotime($date));
$year = date('Y', strtotime($date));
$result = strtotime("{$year}-{$month}-01");
$result = strtotime('-1 second', strtotime('+1 month', $result));
return date('Y-m-d', $result);
}
$a_date = "2009-11-23";
echo last_day_of_the_month($a_date);
Nếu bạn sử dụng tiện ích mở rộng API Carbon cho PHP DateTime, bạn có thể nhận được ngày cuối cùng của tháng với:
$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time
$date->day = 0;
Sử dụng Zend_Date khá dễ dàng:
$date->setDay($date->get(Zend_Date::MONTH_DAYS));
Nếu bạn có một tháng khôn ngoan thì hãy lấy ngày cuối cùng của tháng sau đó,
public function getLastDateOfMonth($month)
{
$date = date('Y').'-'.$month.'-01'; //make date of month
return date('t', strtotime($date));
}
$this->getLastDateOfMonth(01); //31
Đây là một chức năng hoàn chỉnh:
public function get_number_of_days_in_month($month, $year) {
// Using first day of the month, it doesn't really matter
$date = $year."-".$month."-1";
return date("t", strtotime($date));
}
Điều này sẽ xuất ra sau:
echo get_number_of_days_in_month(2,2014);
Đầu ra: 28
Có nhiều cách để có được ngày cuối cùng của tháng.
//to get last day of current month
echo date("t", strtotime('now'));
//to get last day from specific date
$date = "2014-07-24";
echo date("t", strtotime($date));
//to get last day from specific date by calendar
$date = "2014-07-24";
$dateArr=explode('-',$date);
echo cal_days_in_month(CAL_GREGORIAN, $dateArr[1], $dateArr[0]);
Tôi đến trễ nhưng có một số cách dễ dàng để làm điều này như đã đề cập:
$days = date("t");
$days = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
$days = date("j",mktime (date("H"),date("i"),date("s"),(date("n")+1),0,date("Y")));
Sử dụng mktime () là cách tôi kiểm soát hoàn toàn mọi khía cạnh của thời gian ... IE
echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));
Đặt ngày thành 0 và di chuyển tháng của bạn lên 1 sẽ cho bạn ngày cuối cùng của tháng trước. 0 và số âm có ảnh hưởng tương tự trong các đối số khác nhau. PHP: mktime - Hướng dẫn
Như một số người đã nói rằng strtotime không phải là cách đi vững chắc nhất và rất ít nếu không có cách nào dễ dàng linh hoạt.
Tôi đang sử dụng strtotime với cal_days_in_month như sau:
$date_at_last_of_month=date('Y-m-d', strtotime('2020-4-1
+'.(cal_days_in_month(CAL_GREGORIAN,4,2020)-1).' day'));
Tôi đã gói nó trong lớp người trợ giúp thời gian hẹn hò của mình ở đây
https://github.com/normandqq/Date-Time-Helper
bằng cách sử dụng
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
Và nó đã được thực hiện
Một cách khác sử dụng mktime và không phải ngày ('t'):
$dateStart= date("Y-m-d", mktime(0, 0, 0, 10, 1, 2016)); //2016-10-01
$dateEnd = date("Y-m-d", mktime(0, 0, 0, 11, 0, 2016)); //This will return the last day of october, 2016-10-31 :)
Vì vậy, cách này sẽ tính toán nếu nó là 31,30 hoặc 29
function first_last_day($string, $first_last, $format) {
$result = strtotime($string);
$year = date('Y',$result);
$month = date('m',$result);
$result = strtotime("{$year}-{$month}-01");
if ($first_last == 'last'){$result = strtotime('-1 second', strtotime('+1 month', $result)); }
if ($format == 'unix'){return $result; }
if ($format == 'standard'){return date('Y-m-d', $result); }
}
Đây là một cách thanh lịch hơn nhiều để có được cuối tháng:
$thedate = Date('m/d/Y');
$lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate))));
Bạn có thể sử dụng " t
" trong chức năng ngày để lấy số ngày trong một tháng cụ thể.
Mã sẽ giống như thế này:
function lastDateOfMonth($Month, $Year=-1) {
if ($Year < 0) $Year = 0+date("Y");
$aMonth = mktime(0, 0, 0, $Month, 1, $Year);
$NumOfDay = 0+date("t", $aMonth);
$LastDayOfMonth = mktime(0, 0, 0, $Month, $NumOfDay, $Year);
return $LastDayOfMonth;
}
for($Month = 1; $Month <= 12; $Month++)
echo date("Y-n-j", lastDateOfMonth($Month))."\n";
Các mã là tự giải thích. Vì vậy, hy vọng nó sẽ giúp.