PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS (https://www.php-resource.de/forum/html-javascript-ajax-jquery-css-bootstrap-less/)
-   -   FF machts richtig (https://www.php-resource.de/forum/html-javascript-ajax-jquery-css-bootstrap-less/76686-ff-machts-richtig.html)

Mr.Programe 09-10-2006 19:08

FF machts richtig
 
Hallo, ich habe so eben ein kleines Skript geschrieben welches zum einen die Zeit zwischen Zeit Zeitpunkten ermittelt und zum andern den Endzeitpunkt verschiebt wenn man die Dauer ändert.

Code:

function set_duration()
  { 
        start = new Date(document.taskform.start_month.value+" "+
                                  document.taskform.start_day.value+", "+
                                  document.taskform.start_year.value+" "+
                                document.taskform.start_time.value);
        start = start.getTime()/60000; //min
        finished = new Date(document.taskform.finished_month.value+" "+
                                        document.taskform.finished_day.value+", "+
                                        document.taskform.finished_year.value+" "+
                                        document.taskform.finished_time.value);
        finished = finished.getTime()/60000; //min
        duration = finished - start;
       
        //Dauer in Tage, Stunden, Minuten aufschlüssen           
        document.taskform.duration_day.value = duration / (24*60);
        document.taskform.duration_hour.value = duration % (24*60) / 60;
        document.taskform.duration_min.value = duration % 60; 
  }

Code:

//reminder Felder ändern         
        start = new Date(document.taskform.start_month.value+" "+
                                  document.taskform.start_day.value+", "+
                                  document.taskform.start_year.value+" "+
                                  document.taskform.start_time.value);
        start = start.getTime(); //Millisec
        finished = new Date(document.taskform.finished_month.value+" "+
                                      document.taskform.finished_day.value+", "+
                                      document.taskform.finished_year.value+" "+
                                      document.taskform.finished_time.value);
        finished = finished.getTime(); //Millisec
        duration_diff = finished - start;
        //Die Felder Tag, Stunde, Minute addieren und in Millisec Umrechnen
        duration_formular = 1000*(60*60*24*document.taskform.duration_day.value
                                        + 60*60*document.taskform.duration_hour.value
                                        + 60*document.taskform.duration_min.value); 
                   
        if(document.taskform.planning_type[1].checked == true)
        {
                  finished = new Date((start + duration_formular));
                  year = finished.getYear();
                  if (year < 999)
                  year += 1900;
                  document.taskform.finished_year.value = year;
                //seltsamerweis weißt javascript scheinbar Januar den Monat 0 zu
                  document.taskform.finished_month.value = finished.getMonth()+1;
                  document.taskform.finished_day.value = finished.getDate();                             
                  document.taskform.finished_time.value = finished.getHours()+":"+finished.getMinutes()
                    }

Das ganze funktioniert im FF auch wunderbar, aber leider nicht im IE. Dieser Zeigt in den Textfelder immer nur "NaN" an. Nun hab ich das ganze im Opera probiert und musste fest stellen das dieser mir, wenn ich als Dauer 0 Tag, 0 Stunden und 0 Minuten eingebe nicht den Richtigen Endzeitpunkt (in dem Fall müsste Start- und Endzeitpunkt ja gleich sein) angibt, aber den falschen Zeitpunkt um die richtigen Werte erhöht, wenn ich nun wieder eine Länger Dauer eingebe (hoffe das war jetzt verständlich).

Weiß irgend wer warum der IE überhaupt nicht will und warum Opera wenn die eingegeben Dauer 0 ist nicht End- gleich Startzeitpunkt setzt?

Schon mal vielen Danke für eure Mühen!

wahsaga 09-10-2006 19:13

Re: FF machts richtig
 
Regeln lesen, Code umbrechen, vor nächster Antwort, sonst *trash*

Mr.Programe 09-10-2006 19:15

sorry hatte ausversehen abgeschickt, bevor es richtig Editiert war. (verdammt bist du schnell was das öffnen von Beiträgen angeht)

wahsaga 09-10-2006 19:28

Re: FF machts richtig
 
Was kommt denn bei der Berechnung von duration_formular raus?

Mr.Programe 10-10-2006 08:28

Ich hab die Kommentierung noch mal überarbeitet. duration_formular gibt die vom Nutzer oder von der ersten Funktion ermittelte Zeit zwischen start und finished in Millisekunden an (die Werte hab ich auch schon mit hilfe von alert überprüft, sie stimmmen).
Ich hab nun aber auch mal die andern Werte kontroliert und fest gestellt das start (Timstamp in Millisekunden) im
FF 1158312600000 (15.09.2006 11:30 der Wert der wirklich im Formular steht)
Opera 1160405340000 (09.10.2006 16:49 keine Ahung wie Opera darauf kommt)
IE NAN
ist.

Mr.Programe 10-10-2006 08:52

Vielleicht noch erwähnenswert, wenn start und finish gleich sind, ermittelt Opera in set_duration() (der ersten Funktion) korret eine Zeit von 0 Tagen, 0 Stunden und 0 Minuten, wenn start = finished ist, ändere ich die Zeit um einer Stunde wird mir aber schon eine Dauer von
-0.0006944444444444445 Tage -0.016666666666666666 Stunden -1 Minuten angezeigt. Die Berechnungen von
start ergibt 19340089 und
von end 19340088
(hier wird in Minuten gerechnent, also eigentlich ne abweichung von 1 Minut statt ener Stunde)

Mr.Programe 11-10-2006 11:11

hmm, ich hab nun mal etwas rum experimentiert und fest gestellt egal ob ich start nach dem Schema
Code:

Objektname = new Date("Monat Tag, Jahr Stunden:Minuten:Sekunden");
oder
Code:

Objektname = new Date(Jahr, Monat, Tag, Stunden, Minuten, Sekunden);
definierte der Internet Explore erkennt das Datum nicht. Nur bei der Nutzung von
Code:

Objektname = new Date(Millisekunden);
erkennt er es als Datum (http://de.selfhtml.org/javascript/objekte/date.htm). Da die Funktionen aber direkt auf die Eingabe des Nutzer reagieren sollen, kann ich nicht PHP bemühen um die Anzahl von Millisekunden zu ermitteln. Der andere weg über die Obengenannten konstrukte funktioniert auch nicht. Fehlen die benötigten Konstruktoren in IE oder was mach ich falsch???

wahsaga 11-10-2006 13:43

Code:

Objektname = new Date("Monat Tag, Jahr Stunden:Minuten:Sekunden");
Objektname = new Date(Jahr, Monat, Tag, Stunden, Minuten, Sekunden);

Also bei mir "funzen" diese beiden Möglichkeiten im IE (6) gut.

Hast du die Hinweise bei SELFHTML beachtet, in welcher Form die Parameter jeweils zu übergeben sind?

Mr.Programe 11-10-2006 16:36

Code:

start = new Date("2006, 10, 5, 12, 30, 00");
start = start.getTime()/60000; //min
alert(start);

Alert gibt NAN aus.

Code:

start = new Date("10 5, 2006 12:30:00");
Alert gibt NAN aus.

D.h. natürlich wieder nur im IE (Version 6.0.2900.2180), FF gibt einen Zahl aus.

Shurakai 11-10-2006 17:05

Tipp: Gib mal nach

start = new Date("2006, 10, 5, 12, 30, 00");

alert(start); aus. Er sagt dir dann ganz genau, was nicht stimmt.


Dann kommt mein zweiter Tipp: Versuche es mal ohne die " ", also

Code:

start = new Date(2006, 10, 5, 12, 30, 00);
Grüße

wahsaga 11-10-2006 17:16

Zitat:

Original geschrieben von wahsaga
Hast du die Hinweise bei SELFHTML beachtet, in welcher Form die Parameter jeweils zu übergeben sind?
Wofür frag' ich dich das eigentlich wohl ...?

Mr.Programe 13-10-2006 15:40

Ok, ich hab es jetzt mit diesem Konstruktor zum laufen bekommen

[/CODE]
Code:

Objektname = new Date(Jahr, Monat, Tag, Stunden, Minuten, Sekunden);
Nun erkennt er in FF, IE und Opera die Daten. IE und Opera haben bei der Berechnung der Tage und Stunden die Kommerzahl zurück gegeben daher musste ich noch Math.floor einbauen (FF macht es auch ohne).

Nochmal vielen Dank für eure Hilfe

Code:

function set_duration()
{
  if(document.taskform.planning_type[1].checked == true)
  {
        start_time = document.taskform.start_time.value;
        finished_time = document.taskform.finished_time.value;
        start_month = document.taskform.start_month.value-1;
        finished_month = document.taskform.finished_month.value-1;
        start_day = document.taskform.start_day.value;
        finished_day = document.taskform.finished_day.value;
        start_year = document.taskform.start_year.value;
        finished_year = document.taskform.finished_year.value;
        start_min = document.taskform.start_time.value.substring(0,2);
        start_hour = document.taskform.start_time.value.substring(3,5);
        finished_min = document.taskform.finished_time.value.substring(0,2);
        finished_hour = document.taskform.finished_time.value.substring(3,5);
                         
        start = new Date(start_year, start_month, start_day, start_min, start_hour, 00);
        start = start.getTime()/60000; //min
               
        finished =
          new Date(finished_year, finished_month, finished_day, finished_min, finished_hour, 00);
        finished = finished.getTime()/60000; //min

        duration = finished - start;                   
        document.taskform.duration_day.value = Math.floor(duration / (24*60));
        document.taskform.duration_hour.value = Math.floor(duration % (24*60) / 60);
        document.taskform.duration_min.value =  duration % 60; 
  }
}



Alle Zeitangaben in WEZ +2. Es ist jetzt 20:02 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG