Date Berechnungen

webbudda

Mitglied
Hallo,

ich ahbe auf einer Seite ein paar Datum-Berechnungen, die (wie ich durch Zuafall bemerkt habe) gar nicht richtig en).

Es soll 4 Berechnungen geben
1. letzten 2 Wochen
2. letzer Monat
3. letzten 3 Monate
4. letzten 6 Monate

Das Problem besteht darain, wenn Monats- oder Jahresgrenzen erreicht werden (aktuell bei monat6), werden die Werte negativ und somit unbrauchbar. Ich hatte schon angefangen, diese manuell zu korrigieren, was mich aber in Teufels Küche gebracht hat. Hat jemand eine Idee?


PHP:
	function getDateTime(auswahl)
	{
        var currentTime = new Date();
		var month = currentTime.getMonth() + 1;
		var day = currentTime.getDate();
		var year = currentTime.getFullYear();
		var monat2 = currentTime.getMonth();
		var day2 = currentTime.getDate()-28;
		var monat3 = currentTime.getMonth()-2;
		var monat6 = currentTime.getMonth()-5;
 		
		month=month+'';
		day=day+'';
		monat2=monat2+'';
		day2=day2+'';
		monat3=monat3+'';				
		monat6=monat6+'';
 

	
		if (month.length==1)  { month='0'+month; }
		if (day.length==1)    { day='0'+day; }
		if (monat2.length==1) { monat2='0'+monat2; }
		if (day2.length==1)   { day2='0'+day2; }
		if (monat3.length==1) { monat3='0'+monat3; }	
		if (monat6.length==1) { monat6='0'+monat6; }
				
   		if (auswahl == "2weeks")
		{	 	alert(year + "-" + month + "-" + day2);
			return (year + "-" + month + "-" + day2);
		}
		else if (auswahl == "lastmonth")
		{	 
			return 	(year + "-" + monat2 + "-" + day);
        }
		else if (auswahl == "last3month")
		{
			 
			return (year + "-" + monat3 + "-" + day);
		}
		else if (auswahl == "last6month")
		{
		    return (year + "-" + monat6 + "-" + day);
			 
		}	
	}
 
strtotime() nimmt dir diese Arbeit ab

PHP:
<?php
    $date = time();
    echo "1. letzten 2 Wochen: ".date("d.M.y", strtotime("-2 week", $date))."<br />";
    echo "2. letzer Monat: ".date("M", strtotime("-1 month", $date))."<br />";    
?>
 
Ich schreib mal einen Mod an, damit dies zu Javascript verschoben wird.. hier bist du demnach falsch
 
Hi,

erstelle für die Berechnung neue Date-Objekte mit den neu berechneten Werten aus dem aktuellen Date-Objekt.
Code:
        var currentTime = new Date();

        var month = (new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate())).getMonth();
        var day = currentTime.getDate();
        var year = currentTime.getFullYear();
        var monat2 = currentTime.getMonth();
        var day2 = (new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-28)).getDate();
        var monat3 = (new Date(currentTime.getFullYear(), currentTime.getMonth()-2, currentTime.getDate())).getMonth();
        var monat6 = (new Date(currentTime.getFullYear(), currentTime.getMonth()-5, currentTime.getDate())).getMonth();

Ciao
Quaese
 
Hi,

besten dank erst einmal für die Antwort. Bin nicht so der crack und hab es daher leider auch nicht hinbekommen. Gebe ich mir monat6 aus
Code:
alert(monat6);
, kommt da 10 raus. Ist wohl der Monat. Da bei dieser Rechnung die Jahresgrenze überschriiten wird, muss vom jahr also 1 subtrahiert werden.

Verstehe die Lösung nicht so ganz. Oder kannst due es etwas ausführlich machen, für Doofe ;-)

thx
 
Hi,

die 10 steht für den November. JS beginnt bei der Monatsnummerierung bei 0 und geht somit bis zur 11 für Dezember.

Willst du die Jahreswechsel berücksichtigen, erstellst du Date-Objekte mit den erforderlichen Zeitänderungen - ausgehend vom aktuellen Datum. Die erhaltenen Objekte verwendest du nun zur Anzeige der Daten.

Beispiel:
Code:
function getDateTime(auswahl){
  var currentTime = new Date();

  // Einen Monat weiter
  var month = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate());
  // 28 Tage zurück
  var day2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-28);
  // Drei Monate zurück
  var monat3 = new Date(currentTime.getFullYear(), currentTime.getMonth()-3, currentTime.getDate());
  // Sechs Monate zurück
  var monat6 = new Date(currentTime.getFullYear(), currentTime.getMonth()-6, currentTime.getDate());

  if (auswahl == "2weeks"){
    return (day2.getFullYear() + " - " + ((day2.getMonth()<10)?"0"+day2.getMonth():day2.getMonth()) + " - " + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate()));
  }else if (auswahl == "lastmonth"){
    return (monat2.getFullYear() + " - " + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + " - " + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
  }else if (auswahl == "last3month"){
    return (monat3.getFullYear() + " - " + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + " - " + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
  }else if (auswahl == "last6month"){
    return (monat6.getFullYear() + " - " + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + " - " + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));
  }
}

alert(getDateTime("last6month"));

Ciao
Quaese
 
Hi,

ich habe bei den Monaten jetzt einen weniger subtrahiert, weil er immer einen Monat zu weit war. Ausserdem habe ich "var monat2" ergänzt.
Hoffe das passt so?!

Das mit letzte 2 Wochen klappt jedenfalls mit -28 bzw. auch mit -14 tage nicht.

Eine Idee?

Code:
function getDateTime(auswahl)
	{
		 
		  var currentTime = new Date();

		  // Einen Monat weiter
		  var month = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate());
		  // 28 Tage zurück
		  var day2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-28);
		  var monat2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate());
		  // Drei Monate zurück
		  var monat3 = new Date(currentTime.getFullYear(), currentTime.getMonth()-2, currentTime.getDate());
		  // Sechs Monate zurück
		  var monat6 = new Date(currentTime.getFullYear(), currentTime.getMonth()-5, currentTime.getDate());

		  if (auswahl == "2weeks"){
			alert((day2.getFullYear() + "-" + ((day2.getMonth()<10)?"0"+day2.getMonth():day2.getMonth()) + "-" + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate())));
		
		
		  }else if (auswahl == "lastmonth"){
			alert(monat2.getFullYear() + "-" + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + "-" + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
		   
		  }else if (auswahl == "last3month"){
			alert(monat3.getFullYear() + "-" + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + "-" + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
		
		
		  }else if (auswahl == "last6month"){
			alert(monat6.getFullYear() + "-" + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + "-" + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));			
		   		
		  }
 
Hi,

bei mir stimmen die Tagesberechnungen - sowohl für 14 als auch für 28 Tage.

Ebenso passen die Monatsberechnungen wie sie in meinem Beitrag stehen. Du hast gelesen, dass die Zählung der Monate bei 0 beginnt?

Wenn du mit monat2 den Zeitpunkt berechnen möchtest, der zwei Monate zurück liegt, solltest du 2 substrahieren.


Ciao
Quaese
 
Monat2 gab es in deinem Code nicht.

Bei mir passen die Monate nicht: immer einer zu wenig nach deinem Code.

Das mit der 28 versgehe ich auch nicht. Müsste da nicht 14 stehen: 2 wochen?
Da schmeisst er mir heute 2010-03-12 (mit -28)

Woran kanns liegen?
 

Neue Beiträge

Zurück