Ayuda con algoritmo
Publicado por javier (1 intervención) el 09/03/2018 21:28:20
Hola, requiero de su apoyo para un problema que tengo .
tengo un proyecto hecho en Code Igniter 2, necesito calcular los días que trabajo un empleado un mes antes,
por ejemplo, en este mes de Marzo 2018, voy a pagar el sueldo de este mismo mes, sin embargo, puede que existan empleados que entraron a trabajar en febrero y necesito calcular cuantos dias trabajaron el mes pasado, y esos días sumarselos a este mes en curso, por ejemplo si alguien entro el 25 de Febrero, necesito que el sistema tome en cuenta los días trabajados desde el 25 de Febrero al día 30 (ya se que febrero tiene 28 días pero por razones administrativas, el sistema contempla todos los meses como si tuvieran 30 días) y esos días trabajados el mes anterior se los sume a los 30 días de Marzo, les anexo el codigo que tengo hecho pero me esta dando bastantes problemas.
nota: este sistema paga sueldos de forma mensual, no quincenal ni semanal, por eso la duda que tengo en cuanto a como sumar los días de un mes anterior.
la variable $alta es la fecha en la cual ingreso un empleado
la variable $fecha_ultimo_pago es la fecha en la que se genero el pago de sueldos del mes anterior, esta fecha no es fija, el pago de sueldos lo pueden realizar el día 15, 16, 20, 21, cualquier día del mes.
$alta = strtotime($comisionista->fecha_ingreso);
if ($fecha_ultimo_pago != NULL && $alta >= $fecha_ultimo_pago)
{
$dias = 0;
//Para descontar dias
if (date('Y-m', $alta) == date('Y-m'))
$dias = -1 * ($alta - strtotime(date('Y-m-1'))) / (60 * 60 * 24);
else
{
// $dias = (strtotime(mktime(0, 0, 0, (int) date('n'), 1, date('Y')) - $alta )) / (60 * 60 * 24);
// $monthbefore = strtotime(mktime(0, 0, 0, ((int) date('m')-1), 1, date('Y')));*/
// $dias = date("F", mktime(0, 0, 0, (int) date('n'), 1, date('Y')) - $alta ) / (60 * 60 * 24);
$diap = $alta;
$diau = strtotime(date('Y-m-30'));
$intervalo = date_diff(date_create($diap), date_create($diau));
$dias = strtotime(date($intervalo)) / 86400;
$monthbefore = date("F", mktime(0, 0, 0, ((int) date('m')-1), 1, date('Y')));
// $monthbefore = strtotime('Y-m-d', )
$diasma = date ('t',$monthbefore );
if($diasma > 30)
$dias = $dias-1;
}
$adicional = (float) ( $comisionista->sueldo_total / 30) * $dias;
Quedo atento a sus comentarios.
Saludos.
tengo un proyecto hecho en Code Igniter 2, necesito calcular los días que trabajo un empleado un mes antes,
por ejemplo, en este mes de Marzo 2018, voy a pagar el sueldo de este mismo mes, sin embargo, puede que existan empleados que entraron a trabajar en febrero y necesito calcular cuantos dias trabajaron el mes pasado, y esos días sumarselos a este mes en curso, por ejemplo si alguien entro el 25 de Febrero, necesito que el sistema tome en cuenta los días trabajados desde el 25 de Febrero al día 30 (ya se que febrero tiene 28 días pero por razones administrativas, el sistema contempla todos los meses como si tuvieran 30 días) y esos días trabajados el mes anterior se los sume a los 30 días de Marzo, les anexo el codigo que tengo hecho pero me esta dando bastantes problemas.
nota: este sistema paga sueldos de forma mensual, no quincenal ni semanal, por eso la duda que tengo en cuanto a como sumar los días de un mes anterior.
la variable $alta es la fecha en la cual ingreso un empleado
la variable $fecha_ultimo_pago es la fecha en la que se genero el pago de sueldos del mes anterior, esta fecha no es fija, el pago de sueldos lo pueden realizar el día 15, 16, 20, 21, cualquier día del mes.
$alta = strtotime($comisionista->fecha_ingreso);
if ($fecha_ultimo_pago != NULL && $alta >= $fecha_ultimo_pago)
{
$dias = 0;
//Para descontar dias
if (date('Y-m', $alta) == date('Y-m'))
$dias = -1 * ($alta - strtotime(date('Y-m-1'))) / (60 * 60 * 24);
else
{
// $dias = (strtotime(mktime(0, 0, 0, (int) date('n'), 1, date('Y')) - $alta )) / (60 * 60 * 24);
// $monthbefore = strtotime(mktime(0, 0, 0, ((int) date('m')-1), 1, date('Y')));*/
// $dias = date("F", mktime(0, 0, 0, (int) date('n'), 1, date('Y')) - $alta ) / (60 * 60 * 24);
$diap = $alta;
$diau = strtotime(date('Y-m-30'));
$intervalo = date_diff(date_create($diap), date_create($diau));
$dias = strtotime(date($intervalo)) / 86400;
$monthbefore = date("F", mktime(0, 0, 0, ((int) date('m')-1), 1, date('Y')));
// $monthbefore = strtotime('Y-m-d', )
$diasma = date ('t',$monthbefore );
if($diasma > 30)
$dias = $dias-1;
}
$adicional = (float) ( $comisionista->sueldo_total / 30) * $dias;
Quedo atento a sus comentarios.
Saludos.
Valora esta pregunta
0