| 

.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!
News:
18.01.2012
moerrk 193 1 4
5
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
5 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 13,2k 4 9
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 1 9
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 14,6k 3 9
0
danke vorerst für die bisherigen rückmeldungen- hab 2.januarwoche einen c#-kurs und möchte mich bis zum kurs optimal vorbereiten und mir ein testprojekt aufbauen ...derzeit mache ich alles mit Access ...in Millisekunden möchte ich nicht herumwerkeln ... ich hätte das ganze mit einer Hilfstabelle mir vorgestellt, wo ich jedes Monat erfasse Jahr/Monat//Tage - diese Hilfstabelle kann ich dann auch nutzen zum befüllen
18.12.2014
0
...benötige also einen start-schubser fürs projekt und werde dann über weihnachten (wo ich dann zeit habe) starten
18.12.2014

Stelle deine Javascript-Frage jetzt!