Comment trouver un jour de confiance de la semaine de la semaine Spéciale en PHP Si initialement, j'ai une chaîne de date comme: 07.05.2010 code>? Par exemple, je veux trouver le dimanche le plus proche (ou n'importe quel jour de la semaine). Comment puis-je mettre en œuvre cela? Merci p>
7 Réponses :
Cela devrait faire:
echo date('d.m.Y', strtotime('next Sunday', strtotime('07.05.2010')));
Pas si ce dernier est un format de date allemand mm.dd.yyyy - StrtOTIME va buendre. Vous devrez trouver une solution pour cela aussi pour obtenir mon uppote :)
De plus, assurez-vous de tester les cas de bord. Que se passe-t-il si 07.05.2010 est un dimanche?
"Dimanche prochain" n'est pas nécessairement le "dimanche le plus proche"
Demandez à vos utilisateurs de saisir la date dans le format approprié. Sinon, vous ne pouvez pas savoir si son 05/07 ou 07/05 que l'utilisateur entrait
Merci, cela a fonctionné même si la date est également un dimanche. Honte sur moi de ne pas connaître cette méthode de 'Strtotime'% de "Strtotime" ...
Donc, par le plus proche i> vous vouliez réellement dire suivant i>?
Juste au cas où vous vouliez que le jour le plus proche em> le jour plutôt que le suivant em> un, voici un moyen de le faire. $date = DateTime::createFromFormat("!d.m.Y", $date)
->modify("-4 days")->modify("next $target");
Geez, je voulais surcharger des choses. Nice +1
Il y a plusieurs réponses postées et je continue de voir des solutions qui pourraient me donner l'instance entrée: un jour de la semaine ("dimanche", "lundi", etc.) P> sortie: Si j'ai demandé le "dimanche" le plus proche et aujourd'hui est: p> espère que cela aide :) p> p>
Ceci peut être fait en utilisant uniquement strtotime () code> et un peu de tromperie.
function findNearest($day, $date)
{
return strtotime("next $day", strtotime("$date - 4 days"));
}
echo date('d.m.Y', findNearest("Sunday", "07.05.2010")); // 09.05.2010
echo findNearest("Sunday", "07.05.2010"); // 1273377600
echo date('d.m.Y', findNearest("Sunday", "09.05.2010")); // 09.05.2010
echo findNearest("Sunday", "09.05.2010"); // 1273377600
echo date('d.m.Y', findNearest("Sunday", "05.05.2010")); // 02.05.2010
echo findNearest("Sunday", "05.05.2010"); // 1272772800
Vous pouvez utiliser la bibliothèque de carbone aussi bien
$date = Carbon::create(2015, 7, 2); // 2015-07-02 // To get the first day of the week $monday = $date->startOfWeek(); // 2015-06-29 $mondayTwoWeeksLater = $date->addWeek(2); // 2015-07-13
/** * * @param \DateTime $date * @param $dayOfWeek - e.g Monday, Tuesday ... */ public function findNearestDayOfWeek(\DateTime $date, $dayOfWeek) { $dayOfWeek = ucfirst($dayOfWeek); $daysOfWeek = array( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', ); if(!in_array($dayOfWeek, $daysOfWeek)){ throw new \InvalidArgumentException('Invalid day of week:'.$dayOfWeek); } if($date->format('l') == $dayOfWeek){ return $date; } $previous = clone $date; $previous->modify('last '.$dayOfWeek); $next = clone $date; $next->modify('next '.$dayOfWeek); $previousDiff = $date->diff($previous); $nextDiff = $date->diff($next); $previousDiffDays = $previousDiff->format('%a'); $nextDiffDays = $nextDiff->format('%a'); if($previousDiffDays < $nextDiffDays){ return $previous; } return $next; } Alternatively you could create a map of what days of weeks are closer, e.g if you're after closest Monday to Wednesday, it would be faster to just find the previous Monday given that it's closer than the next Monday.
Demandez-vous un algorithme? Si oui, pouvez-vous spécifier l'entrée / la sortie requise?
Vous trouverez peut-être cette solution intéressante: is.gd/bxrha
@nuqqsa zend_date est juste une douleur à utiliser imho