Errechnen einer Zeitdauer

Hallo,

bevor ich mir eine Kugel durch den Kopf jage hoffe ich, daß mir hier jemand meinen Denkfehler lösen kann.

Und bevor jemand sagt: Schau ins SDK und in das Forum. habe ich getan und mittlerweile zwei Tage damit verbracht die gefunden Punkte ans laufen zu kriegen.

Die Aufgabenstellung A:

Es wird ein Datensatz erzeugt und dort gibt es das Feld Beginn und das Feld Ende
Im Onload wird als Standard für Beginn das heutige Datum und die Uhrzeit 8.00 Uhr eingetragen. Für Ende ebenfalls das heutige Datum und die Uhrzeit 18.00 Uhr.

Das funktioniert und sieht bei mir so aus:

==================
// Die Felder Beginn und Ende vorab füllen

var oField01 = crmForm.all.new_beginn;
var oField02 = crmForm.all.new_ende;

// Außerdem müssen zwei Zeitobjekte deklariert werden
var oBeginn;
oBeginn = new Date();
oBeginn = oBeginn.setHours(8,0,0);

var oEnde;
oEnde = new Date();
oEnde = oEnde.setHours(18,0,0);

// Es muß also vorab geprüft werden ob die Felder bereits gefüllt sind
// und ob die Felder gültig sind
// Feld Beginn
if (typeof(oField01) != "undefined" && oField01 != null)
{
if (oField01.DataValue == null)
{
oField01.DataValue = oBeginn;
}
}

// Feld Ende
if (typeof(oField02) != "undefined" && oField02 != null)
{
if (oField02.DataValue == null)
{
oField02.DataValue = oEnde;
}
}
============

Vermutlich kann man das mit der Prüfung auf die FormType noch verkürzen.

Jetzt möchte ich aber im OnChange-Event das zweite Datumsfeld ändern, wenn das erste Datumsfeld geändert wurde. Beispielsweise wenn der Tag im Beginn geändert wird, dann soll der gleiche Tag auch im Ende stehen. Aber die Uhrzeit soll unverändert bleiben.

Aber alle Versuche, die ich mit getDate,setDate etc. gemacht habe enden entweder in "'undefined' ist NULL oder kein Objekt" bzw. "Objekt doesn't support..."


Die Aufgabenstellung B:

Auch beim Berechnen der Dauer zwischen Ende und Beginn erhalte ich außer Fehlermeldungen keine Resultate. Ich vermute im Moment einfach, das getMonth() und Kollegen keine INT-Werte zurückgeben. Aber das sollte sie doch, oder?


Deshalb meine Bitte: Kann mir jemand das Brett von der Stirn nehmen?

Herzlichen Dank
Harald


AW: Errechnen einer Zeitdauer

Hallo Harald, so sollte es gehen (ohne Fehlerprüfung):

Im OnLoad() Event:

var CRM_FORM_TYPE_CREATE = 1;

var oField01= crmForm.all.new_beginn;
var oField02 = crmForm.all.new_ende;


switch (crmForm.FormType)
{
case CRM_FORM_TYPE_CREATE:
oField01.DataValue = new Date().setHours(8,0,0);
oField02.DataValue = new Date().setHours(18,0,0);
break;
}


und im OnChange() Event des Feldes new_beginn:

var oField01DataValue = crmForm.all.new_beginn.DataValue;
var oField02 = crmForm.all.new_ende;
var oField02CurrentDataValue = oField02.DataValue;

oField02 .DataValue = new Date(
oField01DataValue.getYear(),
oField01DataValue.getMonth(),
oField01DataValue.getDate(),
oField02CurrentDataValue.getHours(),
oField02CurrentDataValue.getMinutes() );






AW: Errechnen einer Zeitdauer

Guten Morgen Erlöser!

vielen herzlichen Dank Joris!

Copy - Paste - Feldnamen anpassen - "ein" überflüssiges Leerzeichen löschen - und es funktioniert!!!!!!!!

Wer keine Fehler macht braucht auch keine Fehlerprüfung.

Aber jetzt werde ich den Code erstmal Zeile für Zeile in meinem Hirn aufbereiten um daraus zu lernen. Und ich verspreche Das Buch "Microsoft JScript.NET Programming" von Justin Rogers noch schneller zu Ende zu lesen.

Nochmals ein herzliches Vergelts Gott

Harald


AW: Errechnen einer Zeitdauer

und für B:

var differenz = crmForm.all.new_ende.DataValue - crmForm.all.new_beginn.DataValue;

// 1000ms * 60min = 60000
crmForm.all.new_dauer.DataValue = differenz/60000;