Obtenir le Dernier lundi - dimanche dates: Est-il un meilleur moyen?
Je suis en train de préparer une requête à mySQL d'attraper record de la semaine précédente, mais j'ai pour traiter les semaines du lundi au dimanche. J'avais initialement fait:
WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))
de découvrir que mySQL traite semaines que le dimanche et le lundi. Donc à la place je suis d'analyse d'obtenir le commencer & date de fin en php comme ceci:
$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')));
Cela fonctionne - il obtient la semaine de la date du lundi (marche à l'envers jusqu'à ce qu'un lundi est touché), puis calcule la semaine précédente dates en fonction à cette date.
Ma question est: Est-il une meilleure façon de le faire? Semble bâclée, et j'attends quelqu'un peut me donner une façon plus propre de le faire - ou peut-être pas parce que j'ai besoin du lundi au dimanche de semaines.
Modifier
Apparemment, il y a:
$start = date('Y-m-d',strtotime('last monday -7 days'));
$end = date('Y-m-d',strtotime('last monday -1 days'));
C'est environ un million de fois plus lisible. Merci.
OriginalL'auteur Stomped | 2010-03-09
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser la fonction strtotime pour ce genre de problèmes de la date
echo date('Y-m-d',strtotime('last monday -7 days'));
Ahurissant.Ahurissant est à droite! Génial! strftime('%Y-%m-%d', strtotime("la semaine dernière, du lundi")), OU à essayer: strftime('%Y-%m-%d', strtotime("le premier jour du mois dernier,"));
Si aujourd'hui lundi? Que faut-il de retour?
Avez-vous attendu jusqu'à aujourd'hui pour le tester? 😉
OriginalL'auteur marvin
(en complétant sur marvin et Piétiné ) vous pouvez Aussi utiliser de cette façon
OriginalL'auteur JRoquez
Lundi de la semaine précédente.
OriginalL'auteur Winston
Marvin réponse est très élégant, bien que si vous voulais vraiment y aller pour la performance que vous pourriez le faire avec un peu d'arithmétique. Vous pourriez en déduire une formule/méthode pour convertir une date arbitraire de "jours depuis un point de départ" (probablement 01.01.0000) et puis le reste des opérations serait facile. Arriver le jour de la semaine à partir de ce nombre est aussi simple que de soustraction et d'obtenir le reste d'une division.
En fait, PHP a une classe Date dans sa bibliothèque PEAR qui a fait exactement cela.
OriginalL'auteur Vilx-
- Je point pour tous les lecteurs ici, il y a un gros problème avec marvin réponse
Voici la capture
Le "lundi dernier" fonction retourne la date de la "dernière" de lundi.Il va être expliqué comme cela , si aujourd'hui, c'est lundi, alors il sera de retour à la date de la "DERNIÈRE SEMAINE" lundi, cependant si, aujourd'hui, n'est pas lundi, ce sera le retour de "CETTE SEMAINE" lundi
La Question est de faire une demande de retour "la Semaine Dernière" lundi. Par conséquent, le résultat sera faux si, aujourd'hui, n'est pas lundi.
J'ai résolu le problème et enveloppé dans ma Date Heure Helper
Il sera seul à la ligne après "INCLURE" la classe
$lastWeekMonday = Model_DTHpr::getLastWeekMonday();
Vérifier Ici
https://github.com/normandqq/Date-Time-Helper
OriginalL'auteur Norman