Poiché la query originaria può restituire anche resultset non ordinati e dal momento che occorre l'array php ( probabilmente per modificare in seguito). Puoi svolgere tale compito tramite DateTime::diff con il contenuto della variabile della data (quindi dinamica) se è una stringa almeno che inizia con 'Y-m-d H:i:s' se 0000-00-00 o NULL o FALSE la data è assente (configurazione MYSQL), puoi impostare anche il timezone tramite la concatenazione di stringhe il punto per php.
oppure crei una variabile per contenere l'oggetto DateTime e poi lo trasformi in $date->format('U'); in UTC e fai altre operazioni.Codice PHP:
$origin = new DateTime('2009-10-11 Europe/Rome');
$target = new DateTime('2009-10-13 Europe/Rome');
$interval = $origin->diff($target);
echo $interval->format('%R%a days');
Beh prima dovrai raggruppare per ID e solo dopo la verifica di start con end, poiché non ordinato.
Es. $arr = array(0 => array('ID' => 10), 1 => array('ID' => 10))
prelevare il valore id e creare una variabile di contenimento per calcolare la data.
Non riesco a trovare una buona ragione per calcolare ogni ID esistente, semmai per il singolo id se è un'agenda o promemoria se da usare per il proprietario di tale id.
Nota* Da php 8.1 diff calcola il momento (cioè direttamente la data compreso il timezone, mentre in precedenza erroneamente calcolava alla conversione UTC).