Tôi có thể nhận được thứ Hai của tuần này với:
$monday = date_create()->modify('this Monday');
Tôi muốn nhận được cùng một cách dễ dàng vào ngày đầu tiên của tháng này. Làm thế nào tôi có thể đạt được điều đó?
Tôi có thể nhận được thứ Hai của tuần này với:
$monday = date_create()->modify('this Monday');
Tôi muốn nhận được cùng một cách dễ dàng vào ngày đầu tiên của tháng này. Làm thế nào tôi có thể đạt được điều đó?
Câu trả lời:
Yêu cầu PHP 5.3 hoạt động ("ngày đầu tiên" được giới thiệu trong PHP 5.3). Mặt khác, ví dụ trên là cách duy nhất để làm điều đó:
<?php
// First day of this month
$d = new DateTime('first day of this month');
echo $d->format('jS, F Y');
// First day of a specific month
$d = new DateTime('2010-01-19');
$d->modify('first day of this month');
echo $d->format('jS, F Y');
// alternatively...
echo date_create('2010-01-19')
->modify('first day of this month')
->format('jS, F Y');
Trong PHP 5.4+ bạn có thể làm điều này:
<?php
// First day of this month
echo (new DateTime('first day of this month'))->format('jS, F Y');
echo (new DateTime('2010-01-19'))
->modify('first day of this month')
->format('jS, F Y');
Nếu bạn thích một cách ngắn gọn để làm điều này và đã có năm và tháng theo các giá trị số, bạn có thể sử dụng date()
:
<?php
echo date('Y-m-01'); // first day of this month
echo date("$year-$month-01"); // first day of a month chosen by you
->modify()
nếu bạn chỉ muốn ngày đầu tiên của tháng hiện tại . Bạn có thể chuyển 'first day of this month'
trực tiếp đến hàm tạo DateTime như : $date = new DateTime('first day of this month')
. Chỉ cần nói ...
Đây là những gì tôi sử dụng.
Ngày đầu tiên của tháng:
date('Y-m-01');
Ngày cuối cùng của tháng:
date('Y-m-t');
date('Y-m-t');
.
date('w', '2015-05-01');
thì tôi kết thúc với ngày trước thay vì ngày thực tế. (Điều này sẽ cho tôi 4 thay vì 5 đúng).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Đây là mọi thứ bạn cần:
$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/>';
strtotime('first day of this month', time())
sẽ trở lại vào ngày đầu tiên và thời gian giống như hiện tại. Vì vậy, đây không phải là ngày đầu tiên lúc 0:00 giờ, ngày đầu tiên và như thời điểm hiện tại. Điều này sửa nó strtotime('first day of this month 00:00:00', time())
.
Hiện tại tôi đang sử dụng giải pháp này:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
Vấn đề duy nhất tôi gặp phải là thời gian kỳ lạ đang được thiết lập. Tôi cần phạm vi chính xác cho giao diện tìm kiếm của chúng tôi và tôi đã kết thúc với điều này:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
Tôi sử dụng một cách điên rồ để làm điều này là sử dụng lệnh này
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
Đó là tất cả
Xấu xí, (và không sử dụng phương thức gọi của bạn ở trên) nhưng hoạt động:
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
last day of {$month} {$year}
hoặc last day of this month
cả hai đều hoạt động. Nhưng hãy nhớ rằng $ tháng sẽ phải là một chuỗi chứa tên của tháng như "tháng một" theo cách nghĩ đến "tháng mười hai". Hoặc bạn chỉ có thể sử dụng date('Y-m-t');
.
Tôi sử dụng công việc này với công việc định kỳ hàng ngày để kiểm tra xem tôi có nên gửi email vào ngày đầu tiên của bất kỳ tháng nào cho các chi nhánh của mình không. Đó là một vài dòng hơn các câu trả lời khác nhưng rắn như đá.
//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];
//if it's not the first day then stop
if($day != "01") {
echo "error - it's not the first of the month today";
exit;
}
sử dụng phương pháp ngày, chúng ta sẽ có thể nhận được kết quả. I E; ngày ('N / D / l', mktime (0, 0, 0, tháng, ngày, năm));
Ví dụ
echo date('N', mktime(0, 0, 0, 7, 1, 2017)); // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017)); // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017)); // will return Saturday
Tất cả những biểu hiện php đặc biệt, trên tinh thần first day of ...
là tuyệt vời, mặc dù chúng hết lần này đến lần khác.
Vì vậy, tôi quyết định xây dựng một vài bản tóm tắt datetime cơ bản và hàng tấn thực hiện cụ thể được tự động hoàn thành bởi bất kỳ IDE nào. Vấn đề là tìm những gì - nhân loại của sự vật. Giống như, today
, now
, the first day of a previous month
, vv Tất cả những điều đó tôi đã liệt kê là datetimes. Do đó, có một giao diện hoặc lớp trừu tượng được gọi làISO8601DateTime
và các mốc thời gian cụ thể thực hiện nó.
Mã trong trường hợp cụ thể của bạn trông như thế:
(new TheFirstDayOfThisMonth(new Now()))->value();
Để biết thêm về phương pháp này, hãy xem mục này .