Comment obtenir les dates du lundi et du mercredi après chaque deuxième semaine à partir d'une date de début et d'une date de fin données
Par exemple
Start date : 01-01-2019
End Date : 05-03-2019
Lundi et mercredi toutes les deux semaines
Les dates suivantes devraient donc figurer dans la liste
Wednesday : 02-01-2019
Monday : 14-01-2019
Wednesday : 16-01-2019
Monday : 28-01-2019
Wednesday : 30-01-2019
Monday : 11-02-2019
Wednesday : 13-02-2019
Monday : 25-02-2019
Wednesday : 27-02-2019
$startDate = '01-01-2019';
$endDate = '01-03-2019';
$day_number = '1';
$ofWeek = '2';
getDateForSpecificDayBetweenDates($startDate,$endDate,$day_number,$ofWeek);
function getDateForSpecificDayBetweenDates($startDate,$endDate,$day_number,$ofWeek){
$endDate = strtotime($endDate);
$days=array('1'=>'Monday','2' => 'Tuesday','3' => 'Wednesday','4'=>'Thursday','5' =>'Friday','6' => 'Saturday','7'=>'Sunday');
$date_array = array();
$cnt=0;
for($i = strtotime($days[$day_number], strtotime($startDate)); $i <= $endDate; $i = strtotime('+1 week', $i))
{
$weeknumber = weekOfMonth(date('Y-m-d',$i));
echo "Week : ".$weeknumber.' - Date : '.date('Y-m-d',$i)."<br>";
if($weeknumber == $ofWeek){
$date_array[$cnt]['dates']=date('Y-m-d',$i);
$date_array[$cnt]['week']=$weeknumber;
$cnt++;
}
}
echo "<pre>";print_r($date_array);echo "<pre>";
}
function weekOfMonth($date) {
// estract date parts
list($y, $m, $d) = explode('-', date('Y-m-d', strtotime($date)));
// current week, min 1
$w = 1;
// for each day since the start of the month
for ($i = 1; $i <= $d; ++$i) {
// if that day was a sunday and is not the first day of month
if ($i > 1 && date('w', strtotime("$y-$m-$i")) == 0) {
// increment current week
++$w;
}
}
// now return
return $w;
}
J'ai utilisé ce code développé mais il ne me donne que 2 semaines du mois dont j'ai besoin toutes les 2 semaines après la date de début
Je ne parviens pas à trouver la deuxième semaine de la plage. Comment identifier les dates qui datent de la deuxième semaine
Toute aide sera appropriée
4 réponses
Cela ressemblait à un défi amusant.
Voici une façon d'utiliser les objets DateTime et la fonction ->modify()
pour passer au lundi et mercredi suivants.
<?php
$start_date = '01-01-2019';
$end_date = '05-03-2019';
$sd = new DateTimeImmutable($start_date);
$nd = new DateTime($start_date);
$ed = new DateTimeImmutable($end_date);
echo 'Start Date = ' . $sd->format('D Y-m-d').PHP_EOL;
// check if the next date from the start date is a monday or a wednesday
// and output the first date accordingly
if ( $sd->modify('next monday') < $sd->modify('next wednesday')) {
echo '>>>' . $nd->modify('next monday')->format('D d/m/Y'). PHP_EOL;
echo '>>>' . $nd->modify('next wednesday')->format('D d/m/Y'). PHP_EOL;
}else{
echo '>>>' . $nd->modify('next wednesday')->format('D d/m/Y'). PHP_EOL;
}
while (1) {
// add 7 days
$nd->add(new DateInterval('P7D'));
// go to next monday unless that means we went past the end date
if ( $nd->modify('next monday') > $ed ) { break; }
echo '>>>' . $nd->format('D d/m/Y'). PHP_EOL;
// go to next wednesday unless that means we went past the end date
if ( $nd->modify('next wednesday') > $ed ) { break; }
echo '>>>' . $nd->format('D d/m/Y'). PHP_EOL;
}
Résultats
Start Date = Tue 2019-01-01
>>>Wed 02/01/2019
>>>Mon 14/01/2019
>>>Wed 16/01/2019
>>>Mon 28/01/2019
>>>Wed 30/01/2019
>>>Mon 11/02/2019
>>>Wed 13/02/2019
>>>Mon 25/02/2019
>>>Wed 27/02/2019
<?php
$date1 = new DateTime('01-01-2019');
$date2 = new DateTime('05-03-2019');
$interval = $date1->diff($date2);
$weekday = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
while($date1<$date2)
{
$day_of_week = intval($date1->format('w'));
if($day_of_week>=1 && $day_of_week<3)
{
$addDays=3-$day_of_week;
}else{
$addDays=15-$day_of_week;
}
$date1->modify('+' . $addDays . ' day');
$day_of_week = intval($date1->format('w')) - 1;
if($date1<$date2)
{
echo $weekday[$day_of_week] . ' - ' . $date1->format('d-m-Y') . '<br>';
}
}
?>
Vous essayez ceci sur le violon php.
J'ai d'abord eu le jour de congé de la semaine.
Puis vérifié si c'est lundi ou mardi si c'est alors obtenir la différence de 3 parce que mercredi est le troisième jour de la semaine et l'ajouter au jour.
Alors vous avez lundi qui devrait être le deuxième lundi après mercredi.
La différence entre deux mois est de 15 jours donc soustraction de 15.
Voici la sortie.
wednesday - 02-01-2019
monday - 14-01-2019
wednesday - 16-01-2019
monday - 28-01-2019
wednesday - 30-01-2019
monday - 11-02-2019
wednesday - 13-02-2019
monday - 25-02-2019
wednesday - 27-02-2019
Vous pouvez utiliser DatePeriod
pour y parvenir:
$begin = new DateTime('2019-01-01');
$end = new DateTime('2019-03-05');
$interval = new DateInterval('P2W');
$period = new DatePeriod($begin, $interval, $end);
$dates = [];
foreach ($period as $date) {
$wednesday = $date->modify('next wednesday');
$monday = (clone $wednesday)->modify('+1 week next monday');
if ($wednesday < $end) {
$dates[] = $wednesday;
}
if ($monday < $end) {
$dates[] = $monday;
}
}
foreach ($dates as $date) {
echo $date->format('D: d-m-Y') . '<br />';
}
Le résultat est:
Wed: 02-01-2019
Mon: 14-01-2019
Wed: 16-01-2019
Mon: 28-01-2019
Wed: 30-01-2019
Mon: 11-02-2019
Wed: 13-02-2019
Mon: 25-02-2019
Wed: 27-02-2019
Vérifiez ici
Essayez cette fonction avec deux horodatages:
<?php
function get_date($startDateTime,$repeat_until){
for ($i = $startDateTime; $i <= $repeat_until; $i+=86400) {
$ShowDay_arr = array(1, 3);
$Newdate = $i;
$Numerday=date("N",$Newdate);
if(in_array($Numerday,$ShowDay_arr)){
$day = date("D", $Newdate);
echo "<b> Day : ".$day."</b> (".date("d-m-Y",$Newdate).")";
echo "<br>";
}
}
}
get_date(1559401144,1561906744);
?>
Questions connexes
De nouvelles questions
php
PHP est un langage de script largement utilisé, de haut niveau, dynamique, orienté objet et interprété, principalement conçu pour le développement Web côté serveur. Utilisé pour les questions sur le langage PHP.