Datum in UNIX-Zeitformat speichern und auslesen

Hallo,

ich breche mich gerade mit den Datumsfunktionen ab.

Ich möchte aus Tag, Monat und Jahr die Zeit in Sekunden haben, die seit dem 01.01.1970 vergangen ist.
Diese möchte ich speichern. Das geht soweit:
Time = Date.UTC(strYear,strMonth,strDay);

Nun möchte ich aber aus der Variablen „Time“ wieder Tag, Monat und Jahr einzeln auslesen.
Wie geht das?

Das geht leider nicht:
day = Time.getUTCDate()
month = Time.getUTCMonth()
year = Time.getUTCFullYear()

Auch das geht nicht:
var temp = new Date(Time);
day = temp .getUTCDate()
month = temp .getUTCMonth()
year = temp .getUTCFullYear()

Was mache ich falsch?

Besten Dank!

Hi!

Willst du das Aktuelle Datum haben?
Dann sollte folgendes funktionieren:

var date = new Date();
var cMonth = date.getMonth();

Das hier sollte auch funktionieren:

var date = new Date();
var month = date.getUTCMonth();

Ich hoffe, das war es, was du wolltest…

Gruß Christoph

Ergänzung
Wenn du allerdings die Anzahl an z.B. Monaten haben willst, die seit dem 1.1.1970 vergangen sind, versuch folgendes:

var time = Date.UTC(2000, 5, 15); // Millisekunden, die bis zum 15.05.2000 vergangen sind

seconds = time / 1000; // Zeit in Sekunden
minutes = seconds / 60; // Zeit in Minuten
hours = minutes / 60; // Zeit in Stunden
days = hours / 24; // Zeit in Tagen

… usw

Willst du das Aktuelle Datum haben?

Nein. Ich möchte ein gegebenes Datum (Tag, Monat, Jahr im UNIX-Timestampformat (Sekunden/ Millisekunden seit 1970) speichern und später wieder auslesen.

Ich möchte die Millisekunden haben, weil ich damit ganz simple 2 verschiedenen Daten/ Datums vergleichen kann oder subtrahieren etc.

Habe folgendes gemacht:

[code]var year, month, day

year = 2009;
month = 8;
day = 31;

// Anzahl Millisekunden aus Datum seit 1970 berechnen
var iUtc1970 = Date.UTC(year,month,day);

// Datum wird gespeichert … und wieder ausgelesen:

// Datum ausgeben
var objDate = new Date(iUtc1970);
var DateStr = objDate.getUTCDate()+"."+objDate.getUTCMonth()+"."+objDate.getUTCFullYear();

// Ausgabe
alert (DateStr);[/code]

Aber warum wird jetzt 1.9.2009 angezeigt??? month ist doch 8 und day = 31

Setze ich day = 1 und month = 9 stimmt das wieder: 1.9.2009

Aber warum geht das mit den 31.8.2009 nicht?

Das’ ja 'n Ding… Hab’s grad mal getestet - scheint echt nich zu funktionieren!
Aber es ist auch nicht das einzige Datum, das Probleme macht. Beim 31.1.09 hat er mir den 3.2.09 ausgegeben. *??*
Ich weiß leider absolut nicht, warum das so ist - der Code sieht eigentlich absolut korrekt aus.

Ich schließe mich hiermit deiner Frage an und warte mit dir auf Antworten :smile:

Gruß Christoph

Noch was…
Laut SELFHTML sind die gültigen Werte für den Monat 0 bis 11.
Allerdings ist das leider noch nicht die Lösung des Problems:
Wenn ich für den Januar beispielsweise die 0 nehme, gibt er mir im Alert ebenfalls die 0 für den Monat aus.

Laut SELFHTML sind die gültigen Werte für den Monat 0 bis 11.
Allerdings ist das leider noch nicht die Lösung des Problems:
Wenn ich für den Januar beispielsweise die 0 nehme, gibt er
mir im Alert ebenfalls die 0 für den Monat aus.

In JavaSript ist es leider so: Monate werden von 0 bis 11 gezählt IMMER! Egal ob man sie setzt oder ausliest. Einzige Ausnahme: Man lässt sich das Ganze als String ausgeben (z.B. (new Date()).toString()).

Man muss also IMMER diese Differenz berücksichtigen!

Das Ganze muss also so aussehen:

var year, month, day

year = 2009;
month = 8;
day = 31;

// Anzahl Millisekunden aus Datum seit 1970 berechnen
var iUtc1970 = Date.UTC(year,month - 1,day);

// Datum wird gespeichert ... und wieder ausgelesen:

// Datum ausgeben
var objDate = new Date(iUtc1970);
var DateStr = objDate.getUTCDate()+"."+(objDate.getUTCMonth() + 1 ) +"."+objDate.getUTCFullYear();

// Ausgabe
alert (DateStr);

Ist leider so.

Gruß
Tobias

Danke.

Bin aufs selbe Problem gestoßen. Habe mich gewundert, dass Monate wie März, Mai … nur 30 Tage und April, Juni … 31 Tage haben.

Ist meiner Meinung nach total inkonsequent, wenn nur MOnate, aber nicht Jahre und Tage bei 0 beginnen.
Zum rechnen ist das eh egal, da nur der Mensch in Monaten, Tagen und Jahren denkt. Also sollte so auch die Eingabe sein.

Danke.

Bin aufs selbe Problem gestoßen. Habe mich gewundert, dass
Monate wie März, Mai … nur 30 Tage und April, Juni … 31
Tage haben.

Ist meiner Meinung nach total inkonsequent, wenn nur MOnate,

Zum rechnen ist das eh egal, da nur der Mensch in Monaten,
Tagen und Jahren denkt. Also sollte so auch die Eingabe sein.

find ich garnicht .

Es gibt die stunde 0
Es gibt die secunde 0
es gibt die minute 0

Vergangen ist in diesem Jahr 0 monate 0 Tage , 0 stunden, 0 minuten, 0 secunden

heute um 1 uhr = heute + 13 stunden + 0 minuten + 0 secunden.

wo ist also das problem .

selsbt der wochentag fängt bei 0 an .

nur menschen denken inkonsequent an den 1. monat also monat 1 .
wenn ich aber ein jahr +1 monat nehme bin ich nicht am 1.januar sondern … Ganz schön inkonsequent so ein mensch.

aber nicht Jahre und Tage bei 0 beginnen.

wie jahre beginnen nicht bei 0 lol, 1900 oder war es 1901 wo die liebe zeitrechnugn des PC erst losgeht .

aber recht hast du das es keinen 0.2.1970 gibt, das ist aber eher eine darstellung.

1970 + 1 monat + 0 tage , wo dann aber dein inkonsequent kommt weil monat ja unbedingt 2 sein soll wegen februar . Was solls, gerechnet ist es richtig, darstellungen sind allerdings was anderes, und du fragst nach der darstelleung und nicht nach der rechnung.
Apfel und birnen. gerechnet wird mit 0 als start , denn 1 wäre immer ein danach :smile:

Ist meiner Meinung nach total inkonsequent, wenn nur MOnate,
aber nicht Jahre und Tage bei 0 beginnen.
Zum rechnen ist das eh egal, da nur der Mensch in Monaten,
Tagen und Jahren denkt. Also sollte so auch die Eingabe sein.

Das Ganze hat seine „Tradition“. Auch in anderen Programmiersprachen wird das so gemacht, z.B. in Java (java.util.Date und java.util.Calendar).
Nicht dass es dadurch besser wird…