Son Pazartesi alın - Pazar günü tarihleri: daha iyi bir yolu var mı?

4 Cevap php

Ben mySQL önceki haftaya rekor kapmak için bir sorgu hazırlanıyor, ama ben Pazartesi olarak hafta davranmak zorunda - Pazar. Ben aslında bu yapmıştı:

WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))

Pazartesi - mySQL Pazar olarak hafta davranır keşfetmek için. Peki yerine ben başlamak ve alıyorum ayrıştırma ediyorum Böyle php bitiş tarihleri:

$i = 0; 
while(date('D',mktime(0,0,0,date('m'), date('d')-$i, date('y'))) != "Mon") { 
  $i++; 
}

$start_date = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+7), date('y')));
$end_date  = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+1), date('y')));

Bu çalışır - bu o tarih esas hafta önceki tarihleri ​​hesaplar (Bir Pazartesi isabet kadar geriye yürüme) Pazartesi için geçerli haftaki tarihini alır.

Benim soru: Bunu yapmak için daha iyi bir yolu var mı? Sadece özensiz görünüyor, ve ben orada birisi bana bir süpürge yapmak için yol verebilir bekliyoruz - Ben Pazartesi gerekir, çünkü ya da belki değil - Pazar haftalar.

Edit

Görünüşe göre, var:

$start = date('Y-m-d',strtotime('last monday -7 days'));
$end   = date('Y-m-d',strtotime('last monday -1 days'));

Bu yaklaşık bir milyon kat daha okunabilir. Teşekkür ederim.

4 Cevap

Eğer tarih bu tür sorunları için strtotime kullanabilirsiniz

echo strtotime("last Monday");

(Marvin ve çiğnendi üzerinde tamamlayan) Ayrıca bu şekilde kullanabilirsiniz

echo date('Y-m-d',strtotime('-1 Monday')); //last Monday
echo date('Y-m-d',strtotime('-2 Monday')); //two Mondays ago
echo date('Y-m-d',strtotime('+1 Monday')); //next Monday

Eğer gerçekten performans için gitmek istedim eğer biraz aritmetik ile bunu yapabileceğini, ancak Marvin cevabı, gerçekten zarif. Sen (muhtemelen 01.01.0000) "Bazı başlangıç ​​noktasından bu yana gün" keyfi bir tarih dönüştürmek ve sonra işlemleri geri kalanı bu kolay olacak bir formül / yöntem elde edebilir. Böyle bir dizi haftanın gün oluyor bir bölümü kalanını çıkarılarak ve almak kadar basittir.

Aslında PHP tam olarak bunu kendi PEAR kütüphanesi bir tarihi sınıf vardı.

Burada Marvin'in cevap büyük bir sorun olduğunu, tüm okuyucular için işaret var

Here is the catch The "last Monday" function will return date the "latest" Monday.It will be explained like this , if today is Monday, then it will return the date of "LAST WEEK" Monday, however if today is not Monday, it will return "THIS WEEK" Monday The Question is request to return "Last Week" Monday. Therefore the result will be incorrect if today is not Monday. I have solved the issue and wrapped in my Date Time Helper It will be only one line after you "INCLUDE" the class

$ LastWeekMonday = Model_DTHpr getLastWeekMonday :: ();

İşte edin

https://github.com/normandqq/Date-Time-Helper