Codeigniter - Ayuda con algoritmo

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cálculo de días trabajados en mes anterior y suma al mes actual

Publicado por Alejandro (44 intervenciones) el 01/09/2023 22:44:12
Para calcular los días trabajados en el mes anterior y sumarlos al mes actual en CodeIgniter 2, puedes hacerlo de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$alta = strtotime($comisionista->fecha_ingreso);
$fechaUltimoPago = strtotime($fecha_ultimo_pago);
 
if ($fechaUltimoPago != NULL && $alta >= $fechaUltimoPago) {
    $diasTrabajados = 0;
 
    // Verifica si la fecha de ingreso es del mes actual
    if (date('Y-m', $alta) == date('Y-m')) {
        $diasTrabajados = -1 * ($alta - strtotime(date('Y-m-01'))) / (60 * 60 * 24);
    } else {
        // Calcula los días trabajados desde la fecha de ingreso hasta el último día del mes anterior
        $ultimoDiaMesAnterior = strtotime(date('Y-m-01', strtotime('-1 month')) . ' last day of last month');
        $diasTrabajados = ($ultimoDiaMesAnterior - $alta) / (60 * 60 * 24);
    }
 
    // Redondea los días trabajados si es necesario
    $diasTrabajados = round($diasTrabajados);
 
    // Realiza el cálculo adicional en base a los días trabajados
    $adicional = ($comisionista->sueldo_total / 30) * $diasTrabajados;
 
    // Ahora tienes la variable $adicional que representa el pago adicional por días trabajados en el mes anterior.
}

Este código primero verifica si la fecha de ingreso del empleado está después de la fecha de último pago (para evitar cálculos innecesarios). Luego, determina si la fecha de ingreso está en el mismo mes actual o en un mes anterior y calcula los días trabajados en consecuencia. Finalmente, calcula el monto adicional en base a los días trabajados.

Recuerda que este código asume que el mes siempre tiene 30 días por razones administrativas, como mencionaste. Asegúrate de adaptarlo a tus necesidades específicas si alguna regla cambia en el futuro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar