Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2020
    Messaggi
    26

    Somma di due campi time con centesimi

    Ciao, sto lavorando con time1 e time2, sono 2 variabili che contengono un time in formato ora, minuti, secondi e centesimi.


    Codice PHP:
    $time1= '10:30:00.00'; //primo time
    $time2= '10:30:10.30'; //secondo time

    //il risultato dovrebbe essere
    $result
    = '10:30:10.30';

    $time1_str= strtotime($time1)-strtotime("00:00:00.00");
    $result= date("H:i:s.f",strtotime($time2)+$time1_str);


    //tra i due c'è una differenza di 10 secondi e 30 centesimi, quindi il risultato dovrebbe essere:
    10:30:10.30
    Cosa sbaglio secondo voi?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Sinceramente non ho capito cosa vuoi avere alla fine, perché dici di voler sommare due campi che contengono un tempo, ma vuoi come risultato il tempo maggiore tra i due.

    La somma dovrebbe essere 21:00:10.30, spiegati meglio.

    Non trovo il formato f, cosa dovrebbe rappresentare?
    https://www.php.net/manual/en/datetime.format.php

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2020
    Messaggi
    26
    Hai ragione sono stato poco preciso.
    Devo sostanzialmente sommare del tempo in secondi ad un orario, dove time1 è il campo con formato ora:minuti:secondi:centesimi, ed il campo time2 riporta i secondi da sommare.

    Per esempio:

    $time1='10:00:00,05'
    $time2='65' (secondi)

    $result=10:00:01,10

    Grazie.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Hai le idee confuse.
    10h:00m:00s.5 + 65secondi fa 10:01:05.5
    e il .5 sono 5decimi di secondo, quindi 50 centesimi.

    Comunque:
    Codice PHP:
    $time1 "10:00:00.5";
    $time2 "65";

    $result = new DateTime($time1 " + " $time2 " seconds");

    echo 
    $result->format('H:i:s.u'); 
    Risultato da troncare in base alla precisione che ti serve, così ti restituisce fino al microsecondo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2020
    Messaggi
    26
    a ok, grazie mille.
    e se volessi invece fare la somma?

    Codice PHP:
    $time1 "10:00:00.00";$time2 "00:00:00.05";

    $result = new DateTime($time1 " + " $time2); 
    Così mi da errore.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Un passo alla volta altrimenti anche lo chef brucia la frittata.
    Semplicemente vuoi calcolare la differenza tra due date, se poi è differente per centesimi (o microsendi), con la classe DateTime funziona da php 7.2 poiché prima c'era un bug per recuperare i microsecondi.
    Non devi effettuare l'aritmetica manualmente ma lavorare tramite funzioni php native.
    Codice PHP:
    $date = new \DateTime('2021-11-10 00:00:00.000001', new \DateTimeZone('Europe/Rome')); // Oggetto
    $date2 = new \DateTime('2021-11-10 00:00:00.000006', new \DateTimeZone('Europe/Rome')); // Oggetto
    $result null;
    //Uguale allo stesso secondo
    if($date->format('U') === $date2->format('U'))
    $result = ('0.' . ($date2)->format('u')) - ('0.' . ($date)->format('u'));
    else
    $hi '';
    //Altro codice php

    //Attenzione php non può usare i numeri in virgola fissa ma in virgola mobile e spesso perde precisione e anche la visualizzazione (impostazione ini precision) può modificare distorcendo il valore effettivamente memorizzato

    var_dump($result); 
    //Output differenza microsecondi 5.0E-6 , il -6 significa aggiungi sei volte zero a sinistra
    Ultima modifica di darbula; 10-11-2021 a 17:24

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2020
    Messaggi
    26
    ok, così ottengo la differenza, ma se volessi poi ricostruire l'orario, compreso della differenza?
    tipo:

    codice:
    $time1 = "10:00:00.00"; $time2 = "00:00:00.05";
    $result= 10:00:00.05

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Non guardare le variabili ma la rappresentazione data in stringa della classe DateTime (altrimenti sebbene ho capito non stai esprimendo bene il concetto).
    Beh io per eludere problemi di transazione da ora legale a ora solare o altro, farei la conversione in UTC dunque il formato U e aggiungere da uno o più secondi. Se $date2 è la fine tra due due date e dovrò aggiungere due secondi.
    Codice PHP:
    $date2->modify('2 second'); //
    var_dump($date2); // Sommato a due secondi all'ora locale, però come detto è meglio convertire in UTC aggiungere i due secondi e convertire nel proprio fuso orario.
    //Giustamente non credo sia difficile ricordare che adesso siamo a +01:00 GMT, cioè l'Italia è un'ora in avatanti rispetto a GMT/UTC 
    Ultima modifica di darbula; 10-11-2021 a 17:38

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2020
    Messaggi
    26
    praticamente devo ottenere la differenza tra i 2 campi time1 e time 2 e ristampare l'ora in formato corretto.

    primo campo $time1 = "10:00:00.00";
    secondo campo da sommare al primo $time2 = "00:00:00.05";
    risultato che vorrei ottenere $result=
    10:00:00.05

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Si io ho capito, anche il codice che ti propongo lo fa.
    Invece di aggiungere secondi aggiungi 000005 microsecondi nella funzione modify.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.