Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    23

    Bug date dopo anno 2038

    Ecco ci siamo, come posso gestire le date che vanno oltre al 19 Gennaio 2038??

    Ho realizzato uno script che memorizza delle pratiche che hanno durata anche trentennale
    ma al momento della conversione della data il sistema va in errore.

    Non posso superare il famigerato Gennaio 2038.

    questo è il codice di esempio:

    <?php
    $nextyear = date("Y-m-d",mktime (0,0,0,date("m"), date("d"), date("Y")+30));
    echo"$nextyear
    ";
    print mktime (0,0,0,date("m"), date("d"), date("Y")+30);
    ?>

    L'esito è
    Warning: mktime(): Windows does not support negative values for this function in c:\programmi\easyphp1-8\www\testdata\index.php on line 2

    Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in c:\programmi\easyphp1-8\www\testdata\index.php on line 2


    Warning: mktime(): Windows does not support negative values for this function in c:\programmi\easyphp1-8\www\testdata\index.php on line 4
    -1

    Come posso risolvere questo problema esiste un modo per aggirare l'ostacolo??

    L'applicazione da me sviluppata gira su Easy php 1.8, con PHP Version 4.3.10 e Mysql 3.23.49.

    Come posso fare a convertire in questo sistema e quindi a memorizzare una data del tipo 2042-02-03 ???

    Aspetto consigli.

    NOTA: ho provato con Easy php 2.01b con PHP Version 5.2.0 e Mysql 5.0.22 e provando lo stesso codice mi torna "1970-01-01".

  2. #2
    beh direi di non usare assolutamente gli unixtimestamp ma invece di passare ad usare le normali date sfruttando il database per fare eventuali operazioni al momento dell'inserimento/aggiornamento/estrazione/rimozione

  3. #3

  4. #4
    Vedrete che John Titor Risolverà Tutto!

  5. #5
    a parte gli interventi inutili, il limite del 2038 non è un bug affatto un bug o un errore di programmazione di alcun genere, bensì, al massimo, è un errore "logico" per due motivi:
    - il primo dipende dall'implementazione di php che usa, per compatibilità, un intero con segno a 32bit, invece di usare la versione a 64bit disponibile su moltissimi sistemi operativi
    - il secondo, invece, dipende dalla testa degli sviluppatori PHP che invece di mettere a disposizioni funzioni per gestire date e orari c'è solo la funzione per leggere lo unix timestamp e basta ... errore logico ben più grave del primo

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    23
    Ho risolto bypassando il PHP ma sfruttando il Mysql in questo modo:

    $data_start="2008-02-26";

    insert into date(data) values( DATE_ADD('$data_start', INTERVAL 40 YEAR) )

    in questo modo il DB memorizza la data corretta senza alcun errore, ovvero "2048-02-26".

    il DATE_ADD svolge la funzione del mktime del php che però superando il 19 Gennaio 2038 non funziona più.

    Per chi volesse consultare il manuale Mysql di questa funzione vada qui DATE_ADD()

    Così posso memorizzare tutte le date che voglio.

  7. #7
    se vi puo interessare io ho fatto cosi : sostituisci day o month con YEAR

    function sommadate($data_prima,$intervallo){
    $calcoloData=esegui_query("select DATE_ADD('$data_prima',INTERVAL $intervallo DAY) as data;");
    $riga=leggi_riga($calcoloData);
    $data_dopo=$riga[0];
    return $data_dopo;
    }
    function sommadate_mesi($data_prima,$intervallo){
    $calcoloData=esegui_query("select DATE_ADD('$data_prima',INTERVAL $intervallo MONTH) as data;");
    $riga=leggi_riga($calcoloData);
    $data_dopo=$riga[0];
    return $data_dopo;
    }

    function sottraidate($data_prima,$intervallo){
    $calcoloData=esegui_query("select DATE_SUB('$data_prima',INTERVAL $intervallo DAY) as data;");
    $riga=leggi_riga($calcoloData);
    $data_dopo=$riga[0];
    return $data_dopo;
    }
    si! si! mi sembra che sto programmando !

  8. #8
    a mi dimenticavo :

    function leggi_riga($esecuzione_query) { //applica il mysql_fetch_array ad una query
    $riga=mysql_fetch_array($esecuzione_query);
    $riga=filtavirgole($riga);
    return $riga;
    }

    function esegui_query ($query) { //per mysql_query e relativi errori
    $risultato=mysql_query($query);
    return $risultato;
    }
    si! si! mi sembra che sto programmando !

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.