Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,559

    contare il numero di notti tra 2 date

    Ciao a tutti,
    oggi ho notato un comportamento anomalo di un mio script che ha sempre funzionato, ma andando a fare un controllo vedo che dal 26 marzo al 29 marzo 2016 conta 2 notti invece di 3.
    Premetto che non tocco quel file dal 6 ottobre 2015 e oggi sto vedendo che mi da quel problema, io ho pensato che il febbraio con 29 giorni possa avermi causato qualche problema, ma non ne sono certo.

    In ogni caso questo e' il codice che utilizzo per contare le notti:
    Codice PHP:
    //CONTO IL NUMERO DI NOTTI
    $dal="$data_arrivo";
    $al="$data_partenza"
    $date_from_parts explode('/'$dal);
    $date_to_parts explode('/'$al);
    $ts_from mktime(000$date_from_parts[1], $date_from_parts[0], $date_from_parts[2]);
    $ts_to mktime(000$date_to_parts[1], $date_to_parts[0], $date_to_parts[2]);
    for (
    $x $ts_from$x <= $ts_to$x += 86400){
    $days[] = date('d/m/Y'$x);
    }
    $giorni"".count($days);
    $notti $giorni-1;
    if(
    $notti>"1"){$mostra_notti="$notti Notti";} else { $mostra_notti="1 Notte";} 
    Le date nel database entrano in questo formato: 2016-03-26 - 2016-03-29

    Come potrei risolvere e da cosa e' dovuto?
    Grazie

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,038
    Allora
    Codice PHP:
    $dal="$data_arrivo";
    $al="$data_partenza"

    // Queste assegnazioni non hanno utilità, puoi usare direttamente $data_arrivo e $data_partenza, quegli apici non trasformano la data in stringa, non hanno alcun effetto

    // equivalgono a

    $dal=$data_arrivo;
    $al=$data_partenza;

    // che come puoi ben capire non hanno ragione di essere usate se non per sprecare risorse 
    Comunque da un'occhiata al codice seguente
    Codice PHP:
    $datetime1 = new DateTime('2016-03-26');
    $datetime2 = new DateTime('2016-03-29');
    $interval $datetime1->diff($datetime2);
    echo 
    $interval->format('%a giorni'); 

  3. #3
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,559
    ho provato con il tuo codice ma mi da pagina bianca...

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,038
    Io l'ho provato e funziona, c'è solo quel codice sulla pagina? Non è che c'è altro che da problemi? Che versione di PHP usi? Serve >= 5.2

  5. #5
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,559
    Rieccomi
    ho la 5.3.3 come versione di php

    Nel file che ho creato ho messo solo il tuo codice
    codice:
    $datetime1 = new DateTime('2016-03-26');
    $datetime2 = new DateTime('2016-03-29');
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%a giorni');
    E mi esce pagina bianca con questo messaggio...
    Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead' in /var/www/vhosts/miosito.com/httpdocs/directory-test/test.php:4 Stack trace: #0 /var/www/vhosts/sito.com/httpdocs/directory-test/test.php(4): DateTime->__construct('2016-03-26') #1 {main} thrown in /var/www/vhosts/sito.com/httpdocs/directory-test/test.php on line 4

    Forse devo aggiustare qualcosa in plesk?

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,038
    Ah ok, allora va a vedere nel php.ini se hai il tiemzone impostato, tipo
    date.timezone=Europe/Rome

    in alternativa lo puoi impostare da codice con
    date_default_timezone_set("Europe/Rome");

  7. #7
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,559
    Si infatti era quello che stavo vedendo.
    L'ho inserito nel file tuo come prima riga ed effettivamente mi da "3 giorni" che e' corretto.

    Controllando sul php.ini del mio server ho anche la voce settata (ricordavo di averlo fatto)

    E' impostato cosi':
    date.timezone = Europe/Rome


    Magari devo aggiungere qualche virgoletta o punto e virgola?

  8. #8
    Considerando i giorni specifici in cui succede, direi che a naso dipende dall'ora solare/legale.

  9. #9
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,559
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Considerando i giorni specifici in cui succede, direi che a naso dipende dall'ora solare/legale.
    in che senso?

    Il codice diAlhazared funziona bene, non capisco perche' pur avendo impostato il timezone nel php.ini mi esce quel messaggio se rimuovo date_default_timezone_set("Europe/Rome"); dal file.php

  10. #10
    Quote Originariamente inviata da allin81 Visualizza il messaggio
    in che senso?
    Nel senso che il primo codice conta i secondi tra due date (alla stessa ora), quindi quando c'e' il cambio di ora legale sballa

    Quote Originariamente inviata da allin81 Visualizza il messaggio
    Il codice diAlhazared funziona bene, non capisco perche' pur avendo impostato il timezone nel php.ini mi esce quel messaggio se rimuovo date_default_timezone_set("Europe/Rome"); dal file.php
    Il codice di Alhazred e' corretto perche' usa - giustamente - le classi apposta.

    Per quanto riguarda il php.ini ci sono varie possibilita':
    - hai cambiato il php.ini sbagliato
    - usi php come mod di apache e non hai riavviato il webserver dopo la modifica

    PS per curiosita' che senso ha la concatenazione in questa riga?
    Codice PHP:
    $giorni"".count($days); 

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 © 2020 vBulletin Solutions, Inc. All rights reserved.