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?


Câu trả lời:


205

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.


3
Chỉ cần thêm thông tin ở đây, tôi đã gặp sự cố khi chuyển đổi ngày trở lại dấu thời gian unix với định dạng này, đã được khắc phục bằng cách sử dụng định dạng 'dmY' thay vì 'mdY' .. cũng là giây cuối cùng sẽ là '23: 59: 59 'thay vì '12 : 59: 59 '..
Syed Qarib

26

Đơn giản

  • Y - Biểu diễn số đầy đủ của một năm, 4 chữ số
  • m - Biểu diễn số của một tháng, với các số 0 ở đầu
  • t - Số ngày trong tháng nhất định

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 />';
?>

18

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

11

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

5

Đối với ngày sử dụng thángnă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'));

5

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

Bạn có thể thay thế date ("Ymd", strtotime ($ date)) bằng $ date vì chúng giống nhau nhưng bạn viết ít mã hơn.
nicolascolman

2

Để biết ngày đầu tiên và ngày cuối cùng của Last Month;

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

echo date("D-F-Y", $dateBegin);  
echo "<br>";        
echo date("D-F-Y", $dateEnd);

2

Ở đị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"));


0
$month=01;
$year=2015;
$num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo $num;

hiển thị 31 ngày cuối cùng của ngày

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.