Get the first and last date of an array

4

In PHP I have this array:

$locados = array('2016-01-01', '2016-01-02', '2016-01-03', '2016-01-06', '2016-01-07', '2016-01-08');

These dates within the array represent two different apartment rentals:

Rent 1: 2016-01-01 until 2016-01-03

Rent 2: 2016-01-06 until 2016-01-08

My question, how do I get this with PHP, detect a group of dates and tell which is the first and the last.

    
asked by anonymous 29.10.2015 / 21:06

3 answers

1

Explanation in the code comment itself

$locados = array('2016-01-01', '2016-01-02', '2016-01-03', '2016-01-06', '2016-01-07', '2016-01-08'); // Array a ser tratada

$dif = "86400"; // 1 dia em segundos (coeficiente)
$count = 0; // Inicializa contador de quantos intervalos haverá

for($i = 0; $i < count($locados); $i++) { // Laço FOR até quado existir índice na array a ser tratada
    // Função 'strtotime' converte em segundos uma data
    if((strtotime($locados[$i+1]) - strtotime($locados[$i])) == $dif) { // Calcula se uma data e a data seguinte possui interval de 1 dia (86400 segundos) 
        $resultado[$count][] = $locados[$i]; // Sendo verdadeira a condição de cima inicia nova array incluindo data
    } else {
        $resultado[$count][] = $locados[$i]; // Sendo falsa, inclui a última data do intervalo atual
        $count++; // Incrementa $count (+1) para próximo índice (intervalo) ser criado no laço
    }
}

echo "<pre>";
print_r($resultado); // Print na Array $resultado
  

Main function used strtotime - > Documentation: link

    
29.10.2015 / 21:14
0

If the question is sorting the data list, I would use the function usort .

It orders a array according to a comparison made by callback .

So what a beauty (a date has been modified to verify that sorting works):

$locados = array(
   '2016-02-01', '2016-01-02', '2016-01-03', '2016-01-06', 
   '2016-01-07', '2016-01-08'
);


usort($locados, function ($a, $b)
{
    return strtotime($a) - strtotime($b);
});


pr($locados);

The result will be:

Array
(
    [0] => 2016-01-02
    [1] => 2016-01-03
    [2] => 2016-01-06
    [3] => 2016-01-07
    [4] => 2016-01-08
    [5] => 2016-02-01
)

To get the last and the first date, we can do this:

function first($arr)
{
     return reset($arr);
}


function last($arr)
{
     return end($arr);
}


first($locados); // 2016-01-02

last($locados); // 2016-02-01

If you do not understand why creating new functions to get the last and the first element, I suggest you read this answer:

link

    
30.10.2015 / 16:11
0

Simple and clean:

<?php

    $array = array('2016-01-01', '2016-01-02', '2016-01-03', '2016-01-06', '2016-01-07', '2016-01-08');

    foreach ($array as $element) 
    {
        if ($element === reset($array))
            $minimo = $element;

        if ($element === end($array))
            $maximo = $element;
    }
?>

    Aluguel 1: <?=$minimo?> até <?=$maximo ?>
    
30.10.2015 / 16:19