kostenloser Webspace werbefrei: lima-city


timestamp (int) aus Datum nach 2038 mit 32bit ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    freecontent

    freecontent hat kostenlosen Webspace.

    Hallo
    ab dem 19.1.2032 ist die Grenze von integer bei timestamp erreicht.(2147483647)

    EDIT: Tippfehler .... es ist natürlich das tag/jahr">Jahr 2038 Problem (bei 32 bit signed integer)


    wenn ich für ein Datum nach dem 19. Januar 2038 einen timestamp brauche
    ... dann habe ich ein Problem ^^

    Das Datum liget im Datum-String:Format aus einem Objekt vor:

    $start_timestamp = strtotime($item->StartDate);
    $ender_timestamp = strtotime($item->EndDate);

    sobald ein EndDate nach dem besagten Datum ist, kommt kein Integer (int) mehr dabei raus
    was dann bei den folgenden Berechnungen mit diesem Wert zum Crash führt.

    jemad ne Idee, wie man das Problem lösen kann?

    Rechnen mit Timestamp von Datum nach 2038 ??? auf 32 Bit System ???
    ?!

    Beitrag zuletzt geändert: 14.9.2011 12:01:32 von freecontent
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie kommst Du auf 2032?


    Der Zeitraum zwischen den beiden Daten
    Donnerstag, 1. Januar 1970 und
    Samstag, 19. Januar 2030
    umfaßt 21933 Tag(e).
    Das sind 3133 Woche(n) und 2 Tag(e)
    oder 526392 Stunden
    oder 31583520 Minuten
    oder 1895011200 Sekunden.

    Der Zeitraum zwischen den beiden Daten
    Donnerstag, 1. Januar 1970 und
    Dienstag, 19. Januar 2038
    umfaßt 24855 Tag(e).
    Das sind 3550 Woche(n) und 5 Tag(e)
    oder 596520 Stunden
    oder 35791200 Minuten
    oder 2147472000 Sekunden.

    aber egal.
    Hier ein kleiner link:

    http://en.wikipedia.org/wiki/Year_2038_problem

    There is no universal solution for the Year 2038 problem.

    aber...
    siehe Link.


    Wenn Du
  4. Autor dieses Themas

    freecontent

    freecontent hat kostenlosen Webspace.

    Hallo
    ok, hab mich verschrieben, ich meinte natürlich 2038 (werde Titel ändern)

    ... genau dann halt 03:14:07 UTC on Tuesday, 19 January 2038


    also als Lösung steht da: run a 64 bit system .... was ich nicht hab
    oder
    changing time_t to an unsigned 32-bit integer, which would extend the range to the year 2106

    ok, wie mache ich das?
    kann man auf einem Webspace per .htaccess oder sonst irgendwie
    den Wert für alle time() und date() Operationen (Funktionen) auf unsigned integer setzen?

    damit ich auch mit strtotime("2042-10-28T00:00:00") einen Wert bekomme, mit dem ich rechnen kann?
    ....... oder andere Methode?

    PS: bisher helfe ich mir so,
    dass ich jedes Datum, das ab Jahr 2038 ist zurück auf 31.12.2037 setze

    $endjahr = (int)substr($item->EndDate, 0, 4); 
    
    // ----------- 32bit --------- 
    if ( $endjahr >= 2038) {
    $item->EndDate = '2037-12-31T00:00:00'; 
    }


    das ist aber keine schöne Lösung, da das Datum ja dann nicht mehr stimmt
    aber für sowas wie "gültig bis ...." ist es schon einsetzbar, da ja eh noch lange hin

  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!