strip_tags remove etiquetas ejemplo php date next

php - remove - strip_tags wordpress



El siguiente día hábil de la fecha dada en PHP (8)

¿Alguien tiene un fragmento de código PHP para calcular el siguiente día hábil para una fecha determinada? ¿Cómo, por ejemplo, YYYY-MM-DD debe convertirse para saber el próximo día hábil?

Ejemplo: Para el 03.04.2011 (DD-MM-YYYY) el siguiente día hábil es el 04.04.2011. Para el 08.04.2011 el siguiente día hábil es el 11.04.2011.

Esta es la variable que contiene la fecha que necesito saber el siguiente día hábil para

$cubeTime[''time''];

La variable contiene: 2011-04-01 el resultado del fragmento debe ser: 2011-04-04


Esta función calculará el día hábil en el futuro o en el pasado. Los argumentos son el número de días, hacia adelante (1) o hacia atrás (0) y una fecha. Si no se proporciona una fecha, la fecha de hoy será utilizada:

// returned $date Y/m/d function work_days_from_date($days, $forward, $date=NULL) { if(!$date) { $date = date(''Y-m-d''); // if no date given, use todays date } while ($days != 0) { $forward == 1 ? $day = strtotime($date.'' +1 day'') : $day = strtotime($date.'' -1 day''); $date = date(''Y-m-d'',$day); if( date(''N'', strtotime($date)) <= 5) // if it''s a weekday { $days--; } } return $date; }


Lo que necesitas hacer es:

  1. Convertir la fecha proporcionada en una marca de tiempo.

  2. Use esto junto con los formateadores w o N para el comando de date de PHP para decirle qué día de la semana es.

  3. Si no es un "día hábil", puede incrementar la marca de tiempo en un día (86400 segundos) y verificar de nuevo hasta que llegue a un día hábil.

NB: Para que esto sea realmente un trabajo, también tendría que excluir cualquier banco o festivo, etc.


Me tropecé con este hilo cuando estaba trabajando en un sitio web danés donde necesitaba codificar un script PHP "Entrega al día siguiente".

Esto es lo que se me ocurrió (esto mostrará el nombre del siguiente día laborable en danés, y el siguiente trabajo + 1 si la hora actual es superior a un límite determinado)

$day["Mon"] = "Mandag"; $day["Tue"] = "Tirsdag"; $day["Wed"] = "Onsdag"; $day["Thu"] = "Torsdag"; $day["Fri"] = "Fredag"; $day["Sat"] = "Lørdag"; $day["Sun"] = "Søndag"; date_default_timezone_set(''Europe/Copenhagen''); $date = date(''l''); $checkTime = ''1400''; $date2 = date(strtotime($date.'' +1 Weekday'')); if( date( ''Hi'' ) >= $checkTime) { $date2 = date(strtotime($date.'' +2 Weekday'')); } if (date(''l'') == ''Saturday''){ $date2 = date(strtotime($date.'' +2 Weekday'')); } if (date(''l'') == ''Sunday'') { $date2 = date(strtotime($date.'' +2 Weekday'')); } echo ''<p>Næste levering: <span>''.$day[date("D", $date2)].''</span></p>'';

Como puede ver en el código de ejemplo, $ checkTime es donde establezco el límite de tiempo que determina si la entrega al día siguiente será +1 día hábil o +2 días hábiles.

''1400'' = 14:00 horas

Sé que las declaraciones if pueden hacerse más comprimidas, pero muestro mi código para que las personas entiendan fácilmente la forma en que funciona.

Espero que alguien pueda usar este pequeño fragmento.


Para vacaciones en el Reino Unido puede utilizar

https://www.gov.uk/bank-holidays#england-and-wales

Los datos del formato ICS son fáciles de analizar. Mi sugerencia es...

# $date must be in YYYY-MM-DD format # You can pass in either an array of holidays in YYYYMMDD format # OR a URL for a .ics file containing holidays # this defaults to the UK government holiday data for England and Wales function addBusinessDays($date,$numDays=1,$holidays='''') { if ($holidays==='''') $holidays = ''https://www.gov.uk/bank-holidays/england-and-wales.ics''; if (!is_array($holidays)) { $ch = curl_init($holidays); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $ics = curl_exec($ch); curl_close($ch); $ics = explode("/n",$ics); $ics = preg_grep(''/^DTSTART;/'',$ics); $holidays = preg_replace(''/^DTSTART;VALUE=DATE:(//d{4})(//d{2})(//d{2}).*/s'',''$1-$2-$3'',$ics); } $addDay = 0; while ($numDays--) { while (true) { $addDay++; $newDate = date(''Y-m-d'', strtotime("$date +$addDay Days")); $newDayOfWeek = date(''w'', strtotime($newDate)); if ( $newDayOfWeek>0 && $newDayOfWeek<6 && !in_array($newDate,$holidays)) break; } } return $newDate; }


Podrías hacer algo como esto.

/** * @param string $date * @param DateTimeZone|null|null $DateTimeZone * @return /NavigableDate/NavigableDateInterface */ function getNextBusinessDay(string $date, ? DateTimeZone $DateTimeZone = null):/NavigableDate/NavigableDateInterface { $Date = /NavigableDate/NavigableDateFacade::create($date, $DateTimeZone); $NextDay = $Date->nextDay(); while(true) { $nextDayIndexInTheWeek = (int) $NextDay->format(''N''); // check if the day is between Monday and Friday. In DateTime class php, Monday is 1 and Friday is 5 if ($nextDayIndexInTheWeek >= 1 && $nextDayIndexInTheWeek <= 5) { break; } $NextDay = $NextDay->nextDay(); } return $NextDay; } $date = ''2017-02-24''; $NextBussinessDay = getNextBusinessDay($date); var_dump($NextBussinessDay->format(''Y-m-d''));

Salida:

string(10) "2017-02-27"

/NavigableDate/NavigableDateFacade::create($date, $DateTimeZone) , es proporcionado por la biblioteca php disponible en https://packagist.org/packages/ishworkh/navigable-date . Primero debe incluir esta biblioteca en su proyecto con el compositor o la descarga directa.


Vea el ejemplo a continuación:

$startDate = new DateTime( ''2013-04-01'' ); //intialize start date $endDate = new DateTime( ''2013-04-30'' ); //initialize end date $holiday = array(''2013-04-11'',''2013-04-25''); //this is assumed list of holiday $interval = new DateInterval(''P1D''); // set the interval as 1 day $daterange = new DatePeriod($startDate, $interval ,$endDate); foreach($daterange as $date){ if($date->format("N") <6 AND !in_array($date->format("Y-m-d"),$holiday)) $result[] = $date->format("Y-m-d"); } echo "<pre>";print_r($result);

Para más información: http://goo.gl/YOsfPX


Proximo dia de la semana

Esto encuentra el próximo día laborable a partir de una fecha específica (sin incluir sábado o domingo):

echo date(''Y-m-d'', strtotime(''2011-04-05 +1 Weekday''));

También puedes hacerlo con una variable de fecha por supuesto:

$myDate = ''2011-04-05''; echo date(''Y-m-d'', strtotime($myDate . '' +1 Weekday''));

ACTUALIZACIÓN: O, si tiene acceso a la clase DateTime de PHP (muy probable):

$date = new DateTime(''2018-01-27''); $date->modify(''+7 weekday''); echo $date->format(''Y-m-d'');

¿Quieres saltar vacaciones ?:

Aunque el póster original mencionó "No necesito considerar las vacaciones", si SÍ quiere ignorar las vacaciones, recuerde que "Vacaciones" es solo una serie de fechas que no desea incluir y difiere según el país. , región, empresa, persona ... etc.

Simplemente coloque el código anterior en una función que excluya / haga un bucle más allá de las fechas que no desea incluir. Algo como esto:

$tmpDate = ''2015-06-22''; $holidays = [''2015-07-04'', ''2015-10-31'', ''2015-12-25'']; $i = 1; $nextBusinessDay = date(''Y-m-d'', strtotime($tmpDate . '' +'' . $i . '' Weekday'')); while (in_array($nextBusinessDay, $holidays)) { $i++; $nextBusinessDay = date(''Y-m-d'', strtotime($tmpDate . '' +'' . $i . '' Weekday'')); }

Estoy seguro de que el código anterior se puede simplificar o acortar si lo desea. Intenté escribirlo de una manera fácil de entender.


function next_business_day($date) { $add_day = 0; do { $add_day++; $new_date = date(''Y-m-d'', strtotime("$date +$add_day Days")); $new_day_of_week = date(''w'', strtotime($new_date)); } while($new_day_of_week == 6 || $new_day_of_week == 0); return $new_date; }

Esta función debe ignorar los fines de semana (6 = sábado y 0 = domingo).