¿Hay alguna manera de usar strtotime
para agregar días laborables (de lunes a viernes) a una fecha? ¿O algún otro método? Lo que quiero hacer es:Días laborables (lunes a viernes) en PHP
date ('Y-m-j' , strtotime ('+3 working days'))
¿Hay alguna manera de usar strtotime
para agregar días laborables (de lunes a viernes) a una fecha? ¿O algún otro método? Lo que quiero hacer es:Días laborables (lunes a viernes) en PHP
date ('Y-m-j' , strtotime ('+3 working days'))
Si se limita a los días laborables, utilice la cadena entre semana.
echo date ('Y-m-j' , strtotime ('3 weekdays'));
Esto debería adelantarse 3 días laborables, por lo que si es jueves, agregará el tiempo adicional de fin de semana.
Fuente: http://www.php.net/manual/en/datetime.formats.relative.php
No * way. * Esto funciona? ¿Hay algo que 'strtotime()' no pueda hacer? –
@Pekka De vez en cuando me fastidió su incapacidad para cosas como "el primer día del mes hace 10 meses" y "el primer día de este mes". – Yahel
Sin embargo, funciona con errores: 'echo date ('Y-m-d', strtotime ('2011-03-27 + 5 weekdays')); 'Esperado el 1 de abril, tengo el 3 de abril. – zerkms
He encontrado este cochecito cuando se necesita una mayor cantidad de días de la semana. Estaba buscando X cantidad de días hábiles después del 1 ° del mes actual.
Se veía bien al principio hasta después de agregar> 5 días hábiles (similar a lo que se encontró @zerkms).
Esto ha demostrado ser más preciso para mí.
function _getBusinessDayOfMonth($days) {
$time = strtotime(date("m/1/Y 00:00")); //finding # of business days after 1st of the month
$i = 0; //start with zero
while ($i < $days) { //loop through until reached the amount of weekdays
$time = strtotime("+1 day", $time); //Increase day by 1
if (date("N", $time) < 6) { //test if M-F
$i++; //Increase by 1
}
}
echo date("m/d/Y", $time);
}
creo que una función se puede desarrollar fácilmente que sólo se puede exportar día actual de la semana hay y se puede añadir dos y mod del 5 le dará facilidad de lunes a viernes.
function increaseWorkDay($workDayToProcess, $dayToAdd){
if($workDayToProcess >= 4 && $workDayToProcess <= 6){
$workDayToProcess= 4;
}
$workDayToProcess+= $dayToAdd;
return $workDayToProcess % 5;
}
Y puede exportar el nombre del día de la semana mediante el uso de una matriz, este método puede utilizarse alternativamente.
lo hago de forma recursiva, trabajó para mí
function add_work_days($date, $day){
if($day == 0)
return $date;
$date->add(new DateInterval('P1D'));
if(!in_array($date->format('N'), array('6', '7')))
$day--;
return add_work_days($date, $day);
}
$date = add_work_days(new DateTime(), 3);
echo $date->format('d/m/Y');
Para versiones anteriores de PHP 5.3 <
function AddWorkingDays($startDate, $adddays)
{
$retdate = $startDate;
$sign = "+";
if($adddays < 0){
$adddays = $adddays*-1;
$sign = "-";
}
while ($adddays > 0) {
$retdate = date ('Y-m-d' , strtotime ("$retdate {$sign}1 day"));
$what_day = date("N", strtotime($retdate));
if ($what_day != 6 && $what_day != 7) // 6 and 7 are weekend
$adddays--;
};
return $retdate;
}
En algunos países del Medio Oriente un fin de semana a la semana de trabajo es de domingo a jueves. ¿Ha pensado en ellos? O –
Esto es para calcular cuántos días en el futuro el plazo de pago es para un evento local, entonces no :-) – fredley
También debe pensar en los días festivos. – yvoyer