Đây là một giải pháp thay thế khả thi cho bạn. strtotime
mạnh mẽ và cú pháp bao gồm các bit thực sự hữu ích
như từ ngữ ngày giờ tương đối toàn diện
.
Bạn có thể sử dụng nó để tạo các ngày trong tuần cụ thể đầu tiên đến thứ N của một tháng cụ thể bằng cách sử dụng định dạng "of". Đây là một ví dụ sử dụng date_create
để gọi một DateTime
đối tượng, nhưng strtotime
cũ thông thường hoạt động theo cách tương tự:
php > $d = date_create('Last Friday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Friday March 25 2011 00:00:00
php > $d = date_create('First Friday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Friday March 04 2011 00:00:00
php > $d = date_create('First Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 06 2011 00:00:00
php > $d = date_create('Fourth Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 27 2011 00:00:00
php > $d = date_create('Last Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 27 2011 00:00:00
Nó cũng sẽ tràn vào tháng, nếu bạn yêu cầu không hợp lệ:
php > $d = date_create('Ninth Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday May 01 2011 00:00:00
Lưu ý rằng nó chỉ hoạt động với số thứ tự cách diễn đạt. Rất tiếc, bạn không thể vượt qua "1" hoặc "3".
Khi bạn sử dụng quyền này để lấy ngày thứ N thích hợp, sau đó bạn có thể chỉ cần thêm số ngày trong tuần cần thiết để bỏ qua (7 cho một tuần, 14 cho hai, 21 cho ba, v.v.) theo yêu cầu cho đến ngày kết thúc được chỉ định hoặc số lượng được chỉ định nhiều tuần đã trôi qua. Một lần nữa, strtotime
để giải cứu, sử dụng đối số thứ hai để xâu chuỗi tính tương đối với nhau:
php > echo date('l F d Y H:i:s', strtotime('+14 days', strtotime('First Thursday of March 2011')));
Thursday March 17 2011 00:00:00
(Bản sao cục bộ của tôi cũng được chấp nhận '+14 days First Thursday of March 2011'
, nhưng điều đó cảm thấy hơi kỳ lạ.)