| 

.NET C# Java Javascript Exception

5
Ich habe das aktuelle Datum gegeben mit z.B.
currentTime = new Date();

Von diesem Date möchte ich nun z.B. 4 Stunden abziehen und das Datum erhalten.
Es muss gewährleistet sein, dass auch bei Monatswechsel, Datumswechsel und Jahreswechsel immer der korrekte Wert ausgegeben wird.

Beispiel:
2012-01-18 01:30:00 +0000 (-4 Stunden) = 2012-01-17 21:30:00 +0000

Wer kann mir dafür ein kleines Skript nennen?

Außerdem ist die Frage ob es möglich ist 2 Dates zu vergleichen z.B.

Wenn 2012-01-18 01:30:00 +0000 größer ist als 2012-01-17 21:30:00 +0000, dann mache ...

Vielen Dank schon mal!
18.01.2012
moerrk 153 3
4
Nun hast Du zwei Antworten zu Deiner 9. Frage, und die ganze ck-Gemeinde ist gespannt, ob Du Dich zu Deiner ersten Bewertung hinreißen läßt...

http://codekicker.de/benutzer/1749/moerrk#user-profile-view-votes
Matthias Hlawatsch 18.01.2012
3 Antworten
3
Date.prototype.addHours = function(hours) {
return new Date(Date.UTC(this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds(), this.getUTCMilliseconds()) + hours * 60 * 60 * 1000);
} //nebenbei: FullYear vs. Year, getDate vs. getDay - toll...

var now = new Date();
alert(now.addHours(4));

//vergleichen kannst Du einfach mit < und >
alert(now < now.addHours(4));
alert(now < now.addHours(-4));


Update:
LiRo hat zu Recht darauf hingewiesen, dass man sich ein Date-Objekt mit getTime() leichter in Millisekunden umrechnen kann als mit dem von mir vorgeschlagenen Weg über Date.UTC(). Damit sähe die addHours-Methode dann so aus:
Date.prototype.addHours = function(hours) {
return new Date(this.getTime() + hours * 60 * 60 * 1000);
}

So gestaltet läßt sie das Objekt, auf dem sie aufgerufen wird, unverändert. Stattdessen gibt sie ein neues zurück. So sollte ein "einfacher" Datentyp eigentlich immer funktionieren. Da aber ein JavaScript-Date ohnehin schon Setter-Methoden hat, die das Objekt verändern können, wäre auch folgendes denkbar:
Date.prototype.addHours = function(hours) {
this.setTime(this.getTime() + hours * 60 * 60 * 1000);
}

(Wer gewohnt ist, dass set*() das Objekt selbst verändert, wird vielleicht auch eher erwarten, dass addHours() das Objekt verändert.)
18.01.2012
Matthias Hlawatsch 8,4k 2 8
Find ich gut, noch besser würde ich finden wenn addHours ein datums objekt zurückgeben würdem zudem die stunden bereits hinzugefügt sind.
Nicolai Schönberg 18.01.2012
Und noch besser wäre, wenn ich Kommentare löschen könnte ^^
Nicolai Schönberg 18.01.2012
Funzt top, herzlichen Dank!
moerrk 19.01.2012
Bitteschön, und danke für das Feedback!
Matthias Hlawatsch 19.01.2012
1
Oder noch einfacher:
var date = new Date();
date.setTime(date.getTime() + 4 * 3600 * 1000);
19.01.2012
LiRo 1,3k 8
1
+1: Wo Du Recht hast... Aber die Date-API ist echt ein Alptraum. Hat die der gleiche Depp verbrochen, der java.util.Date vermurkst hat? Ich habe nach genau sowas wie getTime() gesucht und es übersehen, d.h. bin beim schnellen Überfliegen der Methodennamen nicht darauf gekommen, dass getTime das gesuchte wäre. Arrghhh... Dazu noch solche "Überraschungen" wie getYear oder getDay, ganz zu schweigen davon, dass Date mutable ist...
Matthias Hlawatsch 19.01.2012
0
Date.prototype.add = function (sInterval, iNum){
var dTemp = this;
if (!sInterval || iNum == 0) return dTemp;
switch (sInterval.toLowerCase()){
case "ms":
dTemp.setMilliseconds(dTemp.getMilliseconds() + iNum);
break;
case "s":
dTemp.setSeconds(dTemp.getSeconds() + iNum);
break;
case "mi":
dTemp.setMinutes(dTemp.getMinutes() + iNum);
break;
case "h":
dTemp.setHours(dTemp.getHours() + iNum);
break;
case "d":
dTemp.setDate(dTemp.getDate() + iNum);
break;
case "mo":
dTemp.setMonth(dTemp.getMonth() + iNum);
break;
case "y":
dTemp.setFullYear(dTemp.getFullYear() + iNum);
break;
}
return dTemp;
}

//sample usage
var d = new Date();
var d2 = d.add("d", 3); //+3days
var d3 = d.add("h", -3); //-3hours
alert(d2);
alert(d3);


http://www.codingforums.com/showthread.php?t=3955
18.01.2012
Floyd 11,0k 3 9

Stelle deine Javascript-Frage jetzt!