ari6265: UTC Zeit weg beim umwandeln in ein Date Objekt

Hi zusammen,

für eine Datumsberechnung wollte ich die UTC Zeit zugrunde legen.

Bei der Umwandlung eines Datums mit toUTCString() wird mir zwar die UTC Zeit richtig ausgegeben, allerdings als String.

Beim Umwandeln dieses Strings in ein Date Objekt, wird die Zeit wieder in die lokale Zeit umgewandelt.
Ich suche eine Möglichkeit ein Date Objekt zu erhalten, was die UTC Zeit enthält.

Bsp.:

var theDate = new Date();
var temp = theDate.toUTCString();
alert(temp);
var theSecondDate = new Date(temp);
alert(theSecondDate);

Für 'temp' erhalte ich: Sun, 23 Mar 2008 14:35:36 GMT
und für 'theSecondDate': Sun Mar 23 2008 15:35:36 GMT+0100

Ich will aber, das 'theSecondDate' diesen Wert erhält: Sun Mar 23 2008 14:35:36 GMT

Hat jemand eine Idee, wie man das machen kann?

thx

  1. Bei der Umwandlung eines Datums mit toUTCString() wird mir zwar die UTC Zeit richtig ausgegeben, allerdings als String.

    Naja, das ist der Zweck dieser Funktion, die Ausgabe eines Zeitpunkts in Form eines Textes, basierend auf der UTC-Zone.

    var theDate = new Date();
    var temp = theDate.toUTCString();
    alert(temp);
    var theSecondDate = new Date(temp);
    alert(theSecondDate);

    Für 'temp' erhalte ich: Sun, 23 Mar 2008 14:35:36 GMT
    und für 'theSecondDate': Sun Mar 23 2008 15:35:36 GMT+0100

    Ich will aber, das 'theSecondDate' diesen Wert erhält: Sun Mar 23 2008 14:35:36 GMT

    Sun, 23 Mar 2008 14:35:36 GMT und Sun Mar 23 2008 15:35:36 GMT+0100 kennzeichen exakt denselben Zeitpunkt. Du verwechselst entweder die interne Datenhaltung des Date-Objektes mit der externen Darstellung, oder bist dir über die Funktion von Zeitzonen und insbesondere ihr Verhältnis untereinander noch nicht so ganz im Klaren.

    1. Hi Gonzo

      Naja, das ist der Zweck dieser Funktion, die Ausgabe eines Zeitpunkts in Form eines Textes, basierend auf der UTC-Zone.

      Is mir schon klar, sonst würde die Funktion nicht toUTCString() heißen ;)

      Sun, 23 Mar 2008 14:35:36 GMT und Sun Mar 23 2008 15:35:36 GMT+0100 kennzeichen exakt denselben Zeitpunkt. Du verwechselst entweder die interne Datenhaltung des Date-Objektes mit der externen Darstellung, oder bist dir über die Funktion von Zeitzonen und insbesondere ihr Verhältnis untereinander noch nicht so ganz im Klaren.

      Ja, aber ich kann mit der lokalen Zeit nix anfangen, vor allem, wenn die Sommerzeit noch dazu kommt. Deswegen wollt ich die UTC Zeit als Grundlage nehmen und die Ausgaben dann mit 'toLocaleString()' im lokalen Format ausgeben. Es gibt ja nicht nur 1 Zeitzone auf dieser Welt.

      1. Hi,

        Sun, 23 Mar 2008 14:35:36 GMT und Sun Mar 23 2008 15:35:36 GMT+0100 kennzeichen exakt denselben Zeitpunkt.

        Sprich: Da kannst *beide* in exakt dieser Form beim Erstellen eines Date-Objektes an dieses verfuettern, und erhaeltst beide Male den gleichen Zeitpunkt.

        Ja, aber ich kann mit der lokalen Zeit nix anfangen, vor allem, wenn die Sommerzeit noch dazu kommt.

        Date ist das "lokale" reichlich Wurst, so lange eine Angabe, um "welche Art" von Lokalitaet es sich handelt, dabeisteht. Beide obigen Angaben erfuellen dieses Kriterium.

        Deswegen wollt ich die UTC Zeit als Grundlage nehmen und die Ausgaben dann mit 'toLocaleString()' im lokalen Format ausgeben. Es gibt ja nicht nur 1 Zeitzone auf dieser Welt.

        Und wo genau liegt jetzt dein Problem?

        Du erstellst das Datum auf UTC-Basis, und toLocaleString() gibt dir die lokale Formatierung, entsprechend den Einstellungen des Client-Rechners, zurueck.

        MfG ChrisB

      2. Ja, aber ich kann mit der lokalen Zeit nix anfangen, vor allem, wenn die Sommerzeit noch dazu kommt. Deswegen wollt ich die UTC-Zeit als Grundlage nehmen und die Ausgaben dann mit 'toLocaleString()' im lokalen Format ausgeben.

        Du hast da immer noch das Verständnisproblem: Jeder Zeitpunkt ist weltweit eindeutig, und genauso ist im Date-Objekt jeder Zeitpunkt eindeutig, ohne Zeitzone. Der Zeitzonen-Unterschied ergibt sich erst, wenn du mit dem Date-Objekt kommunizierst.

        Wenn du ein neues Date-Objekt erstellst, dann hat es nicht die Zeit in München oder die Zeit in Tokio, nicht deutsche Winterzeit oder UTC-Zeit, sondern den weltweit aktuellen Zeitpunkt. Diesen Zeitpunkt kannst du dann mittels toLocaleString() oder toGMTString() ausgeben lassen, was zwar in unterschiedlichen Uhrzeiten endet, aber immer der gleiche Zeitpunkt ist.

        Möchtest du ein Date-Objekt mit einer UTC-Zeit füttern, verwende die setGMT…()-Methoden bzw. gib bei parse() die Zeitzone (UTC) mit an.

        Es gibt ja nicht nur 1 Zeitzone auf dieser Welt.

        Eben deshalb kennt das Date-Objekt intern theoretisch keine Zeitzone, sondern nur in seinen Schnittstellen.