2012-06-13 15 views
5

Tôi đang tìm một cách đáng tin cậy để trả lại ngày đầy đủ của một ngày trong tuần cụ thể (ví dụ: "Mon") cho hiện tại tuần.Tính toán ngày tương đối bằng php sử dụng strtotime()

Kể từ hôm nay là Thứ Tư 13 Tháng 6, 2012, tôi mong đợi <?php echo date("Y-m-d", strtotime('Mon this week')); ?> dẫn đến 2012-06-11, nhưng thay vì trở về php 2012-06-18 như thể nó diễn giải tuần này như ý nghĩa tuần tới. Tại sao hành vi này và tôi nên làm gì?

Cảm ơn.

--Jeff

+3

Làm cách nào để xác định "tuần này"? Thứ hai mặc dù chủ nhật? Chủ Nhật đến Thứ Bảy? Thứ Bảy đến Thứ Sáu? Hoặc cái gì khác hoàn toàn? –

+0

thú vị. Tôi chỉ chạy nó dưới PHP5.4, và nhận được thứ 11 cho 'Mon tuần này' và thứ 18 cho 'Mon này'. Bạn đang chạy phiên bản PHP nào? – dnagirl

+0

php phiên bản 5.2 – jalperin

Trả lời

5

date('Y-m-d', strtotime('last Monday', strtotime('Sunday')));

này tìm kiếm cho Thứ Hai tuần trước vào chủ nhật tới.

0

tôi nghĩ rằng đây là giải pháp cho vấn đề của bạn:

$monday_date = date("Y-m-d", mktime(0,0,0, date("m"), date("j")-(date("w")+1), date("Y"))); 
2

Theo tài liệu php relative date formats.

Sau đó, Monday this week trước tiên sẽ chuyển đến next Monday và sau đó xử lý văn bản tương đối của this week.

tên ngày: Di chuyển đến ngày tiếp theo của tên này trừ khi đó là ngày hiện tại, sau đó nó sẽ không chuyển tiếp. Nói cách khác, nếu ngày hiện tại là ngày 11 tháng 6, thì strtotime('Monday this week') sẽ trả lại ngày 11 tháng 6 trong khi ngày hiện tại là ngày 13 tháng 6 thì strtotime('Monday this week') sẽ trả lại ngày 19 tháng 6