Vom Benutzer eingegebens Datum auslesen und mit 2 Tagen ausgeben
Kohlar
- javascript
Hallo Liebes Foren Team!
Ich würde gerne ein vom Benutzer eingegenes Datum auslesen und bei Knopdruck auf einen Button wieder mit + 2 Tagen ausgeben.
Der Benutzer gibt das Datum via einem Datepicker ein.
<input class="Button" type="button" value="Express" onclick="LFB()">
<p id="LFB"></p>
<script type="text/javascript">
function LFB(LFB)
{
var heute=new Date();
var tag, monat,jahr,starttag,startmonat,startjahr;
starttag=heute.getDate();
startmonat=heute.getMonth();
startjahr=heute.getFullYear();
{
heute=new Date(startjahr, startmonat, starttag + 2);
tag=heute.getDate();
if(tag<10)tag="0"+tag;
monat=heute.getMonth()+1;
if(monat<10)monat="0"+monat;
jahr=heute.getFullYear();
LFB = tag+"."+monat+"."+jahr;
}
Das ist der derzeitige Stand. Hier wird einfach das Datum von heute ausgelesen und + 2 Tage dazugerechnet.
Vielen Dank im Voraus
Kohlar
Ps. Was müsste ich beim derzeitigen Stand ändern, dass es das wochenende nicht dazuerechnet. z.B. Das ich heute auf den Knopf drücke, dass das Datum 14.01.2013 wäre?
heute=new Date(startjahr, startmonat, starttag + 2);
Was machst du dann am 30.? Da wird als Tag der 32. übergeben und es knallt.
Nimm die Millisekunden von heute und addiere da die Millisekunden von zwei Tagen drauf.
Ps. Was müsste ich beim derzeitigen Stand ändern, dass es das wochenende nicht dazuerechnet.
Prüfen ob heute Donnerstag oder Freitag ist und dann nochmal 2 Tage drauf rechnen.
Hallo,
vielen Dank für dein tipp.
Aber wie kann ich das vom unser eingegebene Datum auslesen (und erst dann sollte das Datum ohne Wochenende dazugerechnet werden)??
Lg
Kohlar
Hallo,
Ich habe mich entschieden es jetzt mit PHP zu versuchen.
<?php
function werktageAddieren($addTage)
{
$zeitpunkt = time();
$tag = getdate($zeitpunkt);
if($tag['weekday'] == "Saturday")
{
$zeitpunkt = $zeitpunkt + 86400*2;
}
if($tag['weekday'] == "Sunday")
{
$zeitpunkt = $zeitpunkt + 86400;
}
for ($i = 0; $i < $addTage; $i++)
{
$zeitpunkt = $zeitpunkt + 86400;
$tag = getdate($zeitpunkt);
if($tag['weekday'] == "Saturday")
{
$zeitpunkt = $zeitpunkt + 86400 * 2;
}
}
echo $zeitpunkt = date("d.m.Y",$zeitpunkt);
return $zeitpunkt;
}
?>
Jedoch gibt er nur die if Schleife aus.
Jedoch gibt er nur die if-Schleife aus.
vermutlich nach "Es gibt keine if-Schleifen, sondern nur if-Abfragen!"
Wer immer diese Seite da hingesetzt hat, hatte aber auch nicht so recht den Überblick. Die Abfrage ist das, was direkt nach dem if kommt und genau so auch bei for, while, etc existiert. Bei "if wetter == schön dann gehe(raus)" gehört "gehe(raus)" wohl kaum zur Abfrage, die Abfrage ist alleine "wetter == schön".
Er meint den if-Block.
Om nah hoo pez nyeetz, Kohlar!
Ich habe mich entschieden es jetzt mit PHP zu versuchen.
In PHP kannst du viel einfacher an die Sache rangehen. Du brauchst doch die Sekunden garnicht.
date_default_timezone_set("UTC");
echo date("r",strtotime("now +2 day"));
zum schnellen Testen: http://writecodeonline.com/php/
Matthias
<!doctype html>
<head>
<title>Übermorgen arbeitstäglich</title>
<meta charset="utf-8">
</head>
<body>
<?php
[code lang=php]/* 2 Arbeitstage später
Mo -> Mi
Di -> Do
Mi -> Fr
Do -> Mo
Fr -> Di
Sa -> Di
So -> Di */
date_default_timezone_set("UTC");
$days = array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
function addwerktage($starttag) {
$toadd = 2;
if ($starttag == "Thu" || $starttag == "Fri") {
$toadd = 4;
}
elseif ($starttag == "Sat") {
$toadd = 3;
}
$zieltag = date("D, j.n.Y",strtotime("$starttag +".$toadd." day"));
return ($zieltag);
}
foreach ($days as $day) {
echo "<pre>Wenn heute ". date("D, j.n.Y",strtotime("$day")) . " wäre, wäre zwei Arbeitstage später: " . addwerktage($day) . "<br></pre>";
}
?>
</body>
</html>[/code]
Matthias
$days = array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
function addwerktage($starttag) {
$toadd = 2;
if ($starttag == "Thu" || $starttag == "Fri") {
$toadd = 4;
}
elseif ($starttag == "Sat") {
$toadd = 3;
}$zieltag = date("D, j.n.Y",strtotime("$starttag +".$toadd." day"));
return ($zieltag);
}foreach ($days as $day) {
echo "<pre>Wenn heute ". date("D, j.n.Y",strtotime("$day")) . " wäre, wäre zwei Arbeitstage später: " . addwerktage($day) . "<br></pre>";
Mit Verlaub, das ist doch sehr speziell. Wenn ich wissen will, welches Datum wir zwei Werktage nach dem 15. Juli haben, dann muss ich mit dieser Funktion bis zur Woche des 15. Juli warten.
Und wieso schreibst du
echo "$starttag +".$toadd." day";
statt
echo "$starttag + $toadd day";
Nicht, dass mir letzteres besser gefallen täte, aber eingebettete Variablen und den Verkettungsoperator in einem Teil zu benutzen, kommt mir etwas inkonsequent vor, um nicht zu sagen, wirr. Wenn schon, denn schon …
Om nah hoo pez nyeetz, Doktor Knallcharge!
Mit Verlaub, das ist doch sehr speziell. Wenn ich wissen will, welches Datum wir zwei Werktage nach dem 15. Juli haben, dann muss ich mit dieser Funktion bis zur Woche des 15. Juli warten.
Ja, das ist korrekt. $starttag muss der Wochentag des gewünschten Datums sein. Die Funktion war lediglich als Anregung gedacht.
aber eingebettete Variablen und den Verkettungsoperator in einem Teil zu benutzen, kommt mir etwas inkonsequent vor, um nicht zu sagen, wirr. Wenn schon, denn schon …
Stimmt auch.
Richtig interessant wird es erst, wenn die Funktion x werktage weiterzählen soll, dann kommt man mit meinem Ansatz ohnehin nicht weiter.
Matthias
Ist es sinnvoller, das Ganze mit PHP zu machen?
Das kommt darauf an, wo du das Ganze benutzen willst. Soll ein Besucher auf einer Webseite das Startdatum eingeben und sofort das Ergebnis angezeigt bekommen, ist Javascript komfortabler, denn bei PHP muss der Kram erst an den Server geschickt werden. Benutzt du die Funktion eh in einem serverseitigen Skript, ist PHP sinniger, da du nicht abhängig von den Vorlieben des Benutzers bist (der Javascript vielleicht abgeschaltet hat).
function werktageAddieren($addTage)
{
$zeitpunkt = time();
$tag = getdate($zeitpunkt);
if($tag['weekday'] == "Saturday")
Das ist unsauber. Es geht zwar aus der Anleitung nur indirekt hervor (durch Vergleich der englischen mit der deutschen Anleitung), aber getdate() gibt in weekday wohl den Namen in der jeweils gewählten Sprache aus – möglicherweise also in Deutsch.
Und selbst, wenn es immer der englische Name wäre, täte ich mich nicht darauf verlassen; in wday wird der Wochentag als Zahl ausgegeben, das ist unmissverständlich.
{
$zeitpunkt = $zeitpunkt + 86400*2;
Das ist auch nicht richtig. Es gibt zwei bis drei Tage im Jahr, die nicht genau 86400 Sekunden lang sind; an diesen Tagen wird sich deine Funktion möglicherweise um einen Tag verrechnen.
Wenn du Tage addieren möchtest, dann addiere Tage und nicht Sekunden. In Javascript hilft das Date-Objekt beim Rechnen (wurde schon angemerkt), in PHP in gleicher Weise mktime(), alternativ DateTime::add().
Zum Problem:
Ich täte an deiner Stelle erstmal die x Tage addieren, dann schauen, wie viele Wochenenden in x Tagen vorhanden sein müssen (auf alle fünf Tage folgt ein Wochenende) und entsprechend Anzahl Wochenenden * 2 Tage hinzuaddieren.
Da wir auch an einem Wochenende starten könnten, ist als Startwert der nächste Montag zu wählen.
In Javascript:
function addiereWochentage(tage) {
var heute = new Date();
var korrektur = 0; // Korrekturtage für Start am Sonnabend oder Sonntag
if (heute.getDay() == 6) { // Sonnabend
korrektur += 2
}
else if (heute.getDay() == 0) { // Sonntag
korrektur += 1
}
return new Date(heute.getFullYear(), heute.getMonth(), heute.getDate() + korrektur + tage + Math.floor(tage / 5) * 2);
}
Prüfen:
var wtage = Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
for (var i = 0; i < 40; i+= 1) {
var z = addiereWochentage(i);
console.debug(i, wtage[z.getDay()], z);
}
0 Mo Date {Mon Jan 13 2014 00:00:00 GMT+0100 (CET)}
1 Di Date {Tue Jan 14 2014 00:00:00 GMT+0100 (CET)}
2 Mi Date {Wed Jan 15 2014 00:00:00 GMT+0100 (CET)}
3 Do Date {Thu Jan 16 2014 00:00:00 GMT+0100 (CET)}
4 Fr Date {Fri Jan 17 2014 00:00:00 GMT+0100 (CET)}
5 Mo Date {Mon Jan 20 2014 00:00:00 GMT+0100 (CET)}
6 Di Date {Tue Jan 21 2014 00:00:00 GMT+0100 (CET)}
7 Mi Date {Wed Jan 22 2014 00:00:00 GMT+0100 (CET)}
8 Do Date {Thu Jan 23 2014 00:00:00 GMT+0100 (CET)}
9 Fr Date {Fri Jan 24 2014 00:00:00 GMT+0100 (CET)}
10 Mo Date {Mon Jan 27 2014 00:00:00 GMT+0100 (CET)}
11 Di Date {Tue Jan 28 2014 00:00:00 GMT+0100 (CET)}
12 Mi Date {Wed Jan 29 2014 00:00:00 GMT+0100 (CET)}
13 Do Date {Thu Jan 30 2014 00:00:00 GMT+0100 (CET)}
14 Fr Date {Fri Jan 31 2014 00:00:00 GMT+0100 (CET)}
15 Mo Date {Mon Feb 03 2014 00:00:00 GMT+0100 (CET)}
16 Di Date {Tue Feb 04 2014 00:00:00 GMT+0100 (CET)}
17 Mi Date {Wed Feb 05 2014 00:00:00 GMT+0100 (CET)}
18 Do Date {Thu Feb 06 2014 00:00:00 GMT+0100 (CET)}
19 Fr Date {Fri Feb 07 2014 00:00:00 GMT+0100 (CET)}
20 Mo Date {Mon Feb 10 2014 00:00:00 GMT+0100 (CET)}
21 Di Date {Tue Feb 11 2014 00:00:00 GMT+0100 (CET)}
22 Mi Date {Wed Feb 12 2014 00:00:00 GMT+0100 (CET)}
23 Do Date {Thu Feb 13 2014 00:00:00 GMT+0100 (CET)}
24 Fr Date {Fri Feb 14 2014 00:00:00 GMT+0100 (CET)}
25 Mo Date {Mon Feb 17 2014 00:00:00 GMT+0100 (CET)}
26 Di Date {Tue Feb 18 2014 00:00:00 GMT+0100 (CET)}
27 Mi Date {Wed Feb 19 2014 00:00:00 GMT+0100 (CET)}
28 Do Date {Thu Feb 20 2014 00:00:00 GMT+0100 (CET)}
29 Fr Date {Fri Feb 21 2014 00:00:00 GMT+0100 (CET)}
30 Mo Date {Mon Feb 24 2014 00:00:00 GMT+0100 (CET)}
31 Di Date {Tue Feb 25 2014 00:00:00 GMT+0100 (CET)}
32 Mi Date {Wed Feb 26 2014 00:00:00 GMT+0100 (CET)}
33 Do Date {Thu Feb 27 2014 00:00:00 GMT+0100 (CET)}
34 Fr Date {Fri Feb 28 2014 00:00:00 GMT+0100 (CET)}
35 Mo Date {Mon Mar 03 2014 00:00:00 GMT+0100 (CET)}
36 Di Date {Tue Mar 04 2014 00:00:00 GMT+0100 (CET)}
37 Mi Date {Wed Mar 05 2014 00:00:00 GMT+0100 (CET)}
38 Do Date {Thu Mar 06 2014 00:00:00 GMT+0100 (CET)}
39 Fr Date {Fri Mar 07 2014 00:00:00 GMT+0100 (CET)}
Jetzt bin ich etwas irritiert.
function werktageAddieren($addTage)
{
$zeitpunkt = time();
$tag = getdate($zeitpunkt);
Mit dieser Funktion berechnest du x Werktage ab jetzt. Das macht dann auch mein Funktionsvorschlag.
Deine ursprüngliche Frage war aber was anderes:
Ich würde gerne ein vom Benutzer eingegenes Datum auslesen und bei Knopdruck auf einen
Button wieder mit + 2 [Werk-] Tagen ausgeben.
Das geht mit einer kleinen Änderung meines Vorschlags zwar auch (Variable heute zum Argument datum aufwerten) …
function addiereWerktage(datum, tage) {
var korrektur = 0; // Korrekturtage für Start am Sonnabend oder Sonntag
if (datum.getDay() == 6) { // Sonnabend
korrektur += 2
}
else if (datum.getDay() == 0) { // Sonntag
korrektur += 1
}
return new Date(datum.getFullYear(), datum.getMonth(), datum.getDate() + korrektur + tage + Math.floor(tage / 5) * 2);
}
… geht aber noch wesentlich simpler:
function addiereZweiWerktage(datum) {
var addition = {0: 2, 1: 2, 2: 2, 3: 2, 4: 4, 5: 4, 6: 3}; // Wochentage Sonntag (0) bis Sonnabend (6)
return new Date(datum.getFullYear(), datum.getMonth(), datum.getDate() + addition[datum.getDay()]); // entsprechend Wochentag nötige Anzahl (Werk-) Tage hinzuzählen
}
Wenn's immer nur zwei Werktage sein sollen, reicht eine feste Tabelle, in der jedem Wochentag von Sonntag bis Sonnabend die Anzahl Tage zugeordnet ist, die addiert werden müssen, um auf den zweiten Folgewerktag zu bekommen: Von Sonntag bis Mittwoch jeweils plus zwei Tage, Donnerstag und Freitag plus vier Tage, Sonnabend plus drei Tage.
Hallo Doktor Knallcharge,
hallo Matthias Apsel,
Das kommt darauf an, wo du das Ganze.........
Vielen Dank für den Tipp. Da der Benutzer das Datum mit einem Datepicker von Jquery eingibt, werde ich wieder zurück zu javaScript gehen.
Zum Problem:
Ich täte an deiner Stelle erstmal die x Tage addieren, dann schauen, wie viele Wochenenden in x Tagen vorhanden sein müssen (auf alle fünf Tage folgt ein Wochenende) und entsprechend Anzahl Wochenenden * 2 Tage hinzuaddieren.
Ok. Das klingt noch verständlich.
Da wir auch an einem Wochenende starten könnten, ist als Startwert der nächste Montag zu wählen.
Wie kann ich das vom Benutzer eingegebene Datum auslesen, und dann berechnen lassen???
<script language="javascript">
function addiereWochentage(tage) {
var heute = new Date();
var korrektur = 0; // Korrekturtage für Start am Sonnabend oder Sonntag
if (heute.getDay() == 6) { // Sonnabend
korrektur += 2
}
else if (heute.getDay() == 0) { // Sonntag
korrektur += 1
}
return new Date(heute.getFullYear(), heute.getMonth(), heute.getDate() + korrektur + tage + Math.floor(tage / 5) * 2);
}
var wtage = Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
for (var i = 0; i < 40; i+= 1) {
var z = addiereWochentage(i);
console.debug(i, wtage[z.getDay()], z);
}
</script>
<script language="javascript">
function addiereZweiWerktage(datum) {
var addition = {0: 2, 1: 2, 2: 2, 3: 2, 4: 4, 5: 4, 6: 3}; // Wochentage Sonntag (0) bis Sonnabend (6)
return new Date(datum.getFullYear(), datum.getMonth(), datum.getDate() + addition[datum.getDay()]); // entsprechend Wochentag nötige Anzahl (Werk-) Tage hinzuzählen
}</script>
<input type="button" value="rechnen" onclick="addiereWochentage()">
<p id="addiereWochentage"></p>
Vielen Dank für eure super hilfe
Kohlar
@@Kohlar:
nuqneH
Da der Benutzer das Datum mit einem Datepicker von Jquery eingibt, werde ich wieder zurück zu javaScript gehen.
Falsche Begründung. Du willst das mit JavaScript machen, damit der Nutzer nicht auf eine Antwort vom Server warten muss, sondern die Interaktion mit der Webseite ohne Zeitverlust abläuft.
Bist du meinem Link nicht gefolgt oder hast du das Gesagte nicht verstanden?
<script language="javascript">
``language="javascript"{:.language-html}
war noch nie sinnvoll.
In HTML 4/XHTML 1 muss es type="text/javascript"`{:.language-html}` heißen. Aber auch das ist in HTML5 nicht mehr sinnvoll, sondern einfach nur
<script>{:.language-html}
.
Qapla'
Hallo,
habe deine Tipps umgesetzt und weiß nun warum ich nicht PHP verwende .... :)
Jedoch komme ich bei meine Problem nicht weiter.
Ich sollte zuerst das heutige Datum auslesen und +2 tage rechnen. Das Problem ist, dass Wochenendtage nicht migerechnet werden dürfen.
Ich habe bereits einiges Versucht, komme jetz aber nicht mehr weiter.
<script>
function addiereWochentage(tage) {
var heute = document.getElementById('datum');
var korrektur = 0; // Korrekturtage für Start am Sonnabend oder Sonntag
if (heute.getDay() == 6) { // Sonnabend
korrektur += 2
}
else if (heute.getDay() == 0) { // Sonntag
korrektur += 1
}
return new Date(heute.getFullYear(), heute.getMonth(), heute.getDate() + korrektur + tage + Math.floor(tage / 5) * 2);
}
var wtage = Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
for (var i = 0; i < 40; i+= 1) {
var z = addiereWochentage(i);
console.debug(i, wtage[z.getDay()], z);
}
function addiereZweiWerktage(datum) {
var addition = {0: 2, 1: 2, 2: 2, 3: 2, 4: 4, 5: 4, 6: 3}; // Wochentage Sonntag (0) bis Sonnabend (6)
return new Date(datum.getFullYear(), datum.getMonth(), datum.getDate() + addition[datum.getDay()]); // entsprechend Wochentag nötige Anzahl (Werk-) Tage hinzuzählen
}
</script>
<input type="button" value="rechnen" onclick="addiereWochentage(tage)">
<p id="addiereWochentage"></p>
Und mein zweiter Versuch:
<input class="Button" type="button" value="bla" onclick="LFBS()">
<script>
function LFBS(LFBS)
{
var heute = new Date();
if (heute.getDay() == 0) {
heute = heute.getMilliseconds() + 86400000
} else if (heute.getDay() == 6) {
heute = heute.getMilliseconds() + 172 800 000
}
var (tag, monat,jahr,starttag,startmonat,startjahr +2);
tag=heute.getDate();
if(tag<10)tag="0"+tag;
monat=heute.getMonth()+1;
if(monat<10)monat="0"+monat;
jahr=heute.getFullYear();
LFB = tag+"."+monat+"."+jahr;
}
document.getElementById("LFBS").innerHTML =LFB;
}
</script>
Jedoch liefert mir das eine gar kein ergebniss bzw das andere ein Flasches
Hi,
Ich sollte zuerst das heutige Datum auslesen und +2 tage rechnen. Das Problem ist, dass Wochenendtage nicht migerechnet werden dürfen.
das sollte mittlerweile jeder verstanden haben. ;-)
Ich habe bereits einiges Versucht, komme jetz aber nicht mehr weiter.
Wir auch nicht, solange du nur ein paar Stücke Code zeigst, aber nicht erklärst, was dir daran nicht passt bzw. wo es falsch läuft. Damit dir jemand bei der Fehlersuche *helfen* kann, musst du den Fehler zunächst mal *beschreiben*. Und zwar nicht nur mit "funktioniert nicht".
Ohne diese Vorarbeit von dir kann ich auch nur die Codeauszüge ansehen und offensichtliche, formale Fehler aufzeigen, die *vielleicht* mit deinem Problem zu tun haben, vielleicht aber auch nicht.
var wtage = Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
for (var i = 0; i < 40; i+= 1) {
var z = addiereWochentage(i);
console.debug(i, wtage[z.getDay()], z);
}
Üblich ist die Schreibweise i++ im Kopf der for-Schleife. Deine Schreibweise mit i+=1 ist nicht falsch und bewirkt dasselbe, man stolpert aber kurz darüber, weil es ungewohnt ist.
> ~~~html
<input type="button" value="rechnen" onclick="addiereWochentage(tage)">
> <p id="addiereWochentage"></p>
Hier sehe ich Konfliktpotential, weil die Funktion den gleichen Bezeichner hat wie das HTML-Elementobjekt. Ich bin mir nicht sicher, ob das problematisch ist, würde dir aber raten, von der mehrfachen Verwendung des gleichen Bezeichners abzusehen.
Und mein zweiter Versuch:
<input class="Button" type="button" value="bla" onclick="LFBS()">
»»
function LFBS(LFBS)
{
var heute = new Date();
Noch schöner: Die Funktion heißt gleich wie ihr Funktionsargument, und weiter unten sehe ich, dass auch noch ein Element mit derselben ID im Dokument existieren soll (das hier aber nicht gezeigt wurde).
> ~~~javascript
if (heute.getDay() == 0) {
> heute = heute.getMilliseconds() + 86400000
> } else if (heute.getDay() == 6) {
> heute = heute.getMilliseconds() + 172 800 000
> }
Was ist das? Drei Zahlen??
var (tag, monat,jahr,starttag,startmonat,startjahr +2);
Und das? Das Keyword var leitet die Deklaration von lokalen Variablen ein. Eine Klammer mit ein paar Werten drin, die so aussieht, als wolle sie ein Funktionskopf sein, gehört dort nicht hin.
Jedoch liefert mir das eine gar kein ergebniss bzw das andere ein Flasches
Zumindest die zwei Syntaxfehler sollte dir dein Browser um die Ohren hauen. Mehr kann ich anhand der mageren Beschreibung noch nicht erkennen.
So long,
Martin
Hallo,
Da ich jetzt ehrlich gesagt extremt verwirrt bin, beginne ich einfach nochmal mit dem Grundgerüst. Hier wird das heutige Datum + 2 Tage ausgegeben. Meinen Problem wisst ihr ja bereits :-)
<input class="Button" type="button" value="Standard" onclick="LFBS()">
<p id="LFBS"></p>
<script type="text/javascript">
function LFBS(werktageadieren)
{
var heute=new Date();
var tag, monat,jahr,starttag,startmonat,startjahr;
starttag=heute.getDate();
startmonat=heute.getMonth();
startjahr=heute.getFullYear();
{
heute=new Date(startjahr, startmonat, starttag + 2);
tag=heute.getDate();
if(tag<10)tag="0"+tag;
monat=heute.getMonth()+1;
if(monat<10)monat="0"+monat;
jahr=heute.getFullYear();
LFB = tag+"."+monat+"."+jahr;
}
document.getElementById("LFBS").innerHTML =LFB;
}
</script>
Jetzt bitte ich euch, welchen teile bzw. teile ich hier genau ändern muss bzw. ersetzt werden müssen.
Ich bedanke mich für eure Geduld
Kohlar
PS: Bitte versteht mich jetzt nicht Falsch. Aber ich habe mittlerweile sehr viele Versionen und habe den Überblick verloren. Damit ich eure Ratschläge in die Tat umsetzten kann, bitte ich euch mir hier genaustens zu erklären mit was für Funktionen und wo diese Plaziert werden müssen.
Hi,
Da ich jetzt ehrlich gesagt extremt verwirrt bin, beginne ich einfach nochmal mit dem Grundgerüst.
das ist ehrlich gesagt eine Frechheit.
Es ist selbstverständlich okay, wenn du die Hinweise mangels Fachwissen nicht im Einzelnen verstehst. Aber jedes Angebot von Hilfe einfach nur damit zu parieren, denselben Mist wieder aufs Neue hinzuklatschen, anstatt mal nachzuforschen, oder selbst nachzudenken, oder auch konkret nach einem Detail zu fragen, oder wenigstens auf Rückfragen einzugehen, ist einfach nur unverschämt.
Du hättest "Ich will keine Hilfe" auch wesentlich kürzer schreiben können.
Ich bin damit raus aus der Nummer.
So long,
Martin
Hallo,
Nach langen und nervenaufreibenden Stunden bin ich an das gewünschte Ziel gekommen.
Ein besonderen Dank an Doktor Knallcharge
Danke und ein guten Wochenstart
Hallo,
Hier wird jetzt das Feld "datum" ausgelesen und es werden auf das ausgelesen Datum 2 tage hinzuaddiert. Bei Knopfdruck wird das Datum im <p> element ausgegeben. Stimmt das so weit?
<input class="Button" type="text" name="datum" id="datepicker">
<script language="javascript">
function addiereWochentage(tage) {
var heute = document.getElementById('datum');
var korrektur = 0; // Korrekturtage für Start am Sonnabend oder Sonntag
if (heute.getDay() == 6) { // Sonnabend
korrektur += 2
}
else if (heute.getDay() == 0) { // Sonntag
korrektur += 1
}
return new Date(heute.getFullYear(), heute.getMonth(), heute.getDate() + korrektur + tage + Math.floor(tage / 5) * 2);
}
var wtage = Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
for (var i = 0; i < 40; i+= 1) {
var z = addiereWochentage(i);
console.debug(i, wtage[z.getDay()], z);
}
</script>
<script language="javascript">
function addiereZweiWerktage(datum) {
var addition = {0: 2, 1: 2, 2: 2, 3: 2, 4: 4, 5: 4, 6: 3}; // Wochentage Sonntag (0) bis Sonnabend (6)
return new Date(datum.getFullYear(), datum.getMonth(), datum.getDate() + addition[datum.getDay()]); // entsprechend Wochentag nötige Anzahl (Werk-) Tage hinzuzählen
}</script>
<input type="button" value="rechnen" onclick="addiereWochentage(tage)">
<p id="addiereWochentage"></p>
Danke für eure Hilfe
Kohlar
Hier wird jetzt das Feld "datum" ausgelesen und es werden auf das ausgelesen Datum 2 tage hinzuaddiert. Bei Knopfdruck wird das Datum im <p> element ausgegeben. Stimmt das so weit?
Bestenfalls ansatzweise. Du versuchst verzweifelt, das Feld datum auszulesen, das war's aber auch schon.
Schau dir doch bitte Code, den du bekommst, erstmal ordentlich an – und damit meine ich nicht "überfliegen und kopieren", sondern wirklich versuchen zu verstehen, was da im Groben vor sich geht, auch, wenn's drei Tage braucht.
Mich stört gerade, dass ich dir nacheinander zwei recht eindeutig benannte Funktionen an die Hand gegeben habe, addiereWochentage() und addiereZweiWerktage(), die zweite beschrieben als einfacheren Ersatz für die erste, du aber blind beide rüberkopierst, anstatt diejenige zu nehmen, die deinem Wunsch am nächsten kommt.
Und obendrein übernimmst du dann auch noch den Democode, der nur, Zitat, "zum Prüfen" der ersten Funktion gedacht war, d.h. um zu sehen, ob sie das tut, was sie soll.
Du schaust dir auch nicht an, welche Argumente eine Funktion haben möchte. Wenn addiereWochentage() ein Argument tage hat und dieses in der Funktion bei heute.getDate() … + tage verwendet wird, dann solltest du dir denken können, dass bei tage die Anzahl der zu addierenden Tage angegeben werden muss.
Stattdessen notierst du ein ziemlich sinnbefreites onclick="addiereWochentage(tage)"; richtig wäre onclick="addiereWochentage(2)".
In dieser Hinsicht noch klüger wäre gewesen, hättest du kurzerhand addiereZweiWerktage(datum) benutzt, denn du möchtest ja zwei Werktage zu einem Datum hinzuaddieren.
Dies erstmal zum Grundsätzlichen. Alles in allem habe ich den Eindruck, du hast dir überhaupt keine Mühe gegeben, den Code und seine Funktion zu verstehen. Du musst dir schon auch selbst ein wenig Mühe geben, wenn du andere Leute um Hilfe bittest. Aus dem Grundschulalter, wo die Erwachsenen den Lütten noch zur Hand gehen, bist du doch sicher raus.
Was jetzt deinen Code angeht:
<input class="Button" type="text" name="datum" id="datepicker">
function addiereWochentage(tage) {
var heute = document.getElementById('datum');
Die letzte Zeile hieß ursprünglich
var heute = new Date()
Hier wird der Variablen namens heute ein neues Date-Objekt zugewiesen. Ein Date-Objekt ist genau dieses, ein Objekt, spezialisiert auf die Verarbeitung von Datum und Uhrzeit, nicht mehr, nicht weniger.
Du kannst da nicht einfach ein Element aus dem HTML-Dokument reinschreiben, das ist doch offenkundig was völlig anderes. Wenn überhaupt, dann möchtest den http://de.selfhtml.org/javascript/objekte/elements.htm#value@title=Wert haben, der in diesem <input>-Element drinsteckt.
Dieser Wert ist aus Sicht des Javascript-Codes allerdings eine Zeichenkette, vermutlich etwas à la "1.2.2014". Das bedeutet, du musst die Zeichenkette erstmal in ein Date-Objekt umwandeln, bevor du anfangen kannst, mit einem Datum zu rechnen. Weil du offenkundig noch einiges zu lernen hast, insbesondere anständiges Lernen, solltest du probieren, die Zeichenkette an den Punkten in ihre Bestandteile Tag, Monat und Jahr http://de.selfhtml.org/javascript/objekte/string.htm#split@title=aufzutrennen und damit ein <http://de.selfhtml.org/javascript/objekte/date.htm#allgemeines@title=Date-Objekt füttern>.
Das wären also meine zweieinhalb Aufgaben für dich:
1. Auslesen eines <input>-Elements.
2. Trennen einer Zeichenkette und Übergabe der Einzelteile an ein Date-Objekt.
Versuche nicht, in deinem bestehenden Code rumzuwurschteln, da kommst du nur durcheinander. Mache eine ganz neue Datei auf und beginne hiermit:
<html><body>
<input type="text" id="datum" value="1.2.2014">
<script>
var wertMeinesInput = …
…
var meinGelesenesDatum = new Date(…
alert(meinGelesenesDatum);
</script>
</body></html>
Wenn du Auslesen, Auftrennen und Umwandeln gemeistert hast und die letzte Zeile, alert(meinGelesenesDatum), das Datum ausspuckt, das im <input>-Element steht (per Vorgabe 1.2.2014), kannst du dein neu erworbenes Wissen in dein Projekt übernehmen und gerne nochmal bezüglich Details oder der Werktagsrechnung nachfragen.
Aber bis dahin bin halte ich mir hier raus, weil du, wie eingangs geschrieben, erstmal lernen musst, selbständig zu lernen, anstatt darauf zu setzen, dass man dir schon alles vorgekauen wird.
Deine Aufgabenstellung war interessant, aber wenn da bei dir außer Copy&Paste nun so gar nichts anzukommen scheint, ist es die Mühe nicht wert.
PS: Beim Arbeiten hilft dir eventuell Firebug. Das ist aber kein Muss, Firefox und Opera haben ähnliche Werkzeuge an Bord.
Hallo,
heute=new Date(startjahr, startmonat, starttag + 2);
Was machst du dann am 30.? Da wird als Tag der 32. übergeben und es knallt.
nein, tut es nicht. Javascript "normalisiert" solche fehlerhaften Datumswerte automatisch. Das ist sogar irgendwo spezifiziert, man darf sich drauf verlassen, und das ist ein üblicher Weg, um in Javascript mit Datumsangaben zu "rechnen".
Ps. Was müsste ich beim derzeitigen Stand ändern, dass es das wochenende nicht dazuerechnet.
Prüfen ob heute Donnerstag oder Freitag ist und dann nochmal 2 Tage drauf rechnen.
*stirnklatsch*
So einfach kann es sein. Mein Ansatz war, so lange 1 Tag draufzuschlagen, bis der Wochentag vom *Ergebnis* nicht mehr Samstag oder Sonntag ist.
Btw: Die gesamte Fragestellung, bzw. ihr Kontext, kommt mir irgendwie sehr bekannt vor. Wollen wir hoffen, dass Kohlar alias Bauer_007 alias Adrian sich mittlerweile etwas geschickter anstellt. Dass der Unfug, der letztes Mal kritisiert wurde, zum Teil immer noch drin ist, macht mich allerdings skeptisch ...
So long,
Martin
Hallo
Btw: Die gesamte Fragestellung, bzw. ihr Kontext, kommt mir ..............
Martin
Der Kontex irgendwie sehr bekannt vor habe ich genau hier heraus kopiert. Denn genau das suchte ich. Jedoch ohne dass, das Wochenende mitgerechnet wird.
Javascript "normalisiert" solche fehlerhaften Datumswerte automatisch.
Oh das ist krass. Bin mir gerade unsicher ob ich das wirklich so unsauber finden soll wie es mir spontan in den Sinn kam. Vielleicht ists ja doch gar nicht so schlecht.
Im speziellen Fall von Kohlar wärs mir aber trotzdem viel zu viel Code, erst die Bestandteile des Datums auszurechnen und dann wieder ein neues zusammensetzen.
Mein Ansatz war, so lange 1 Tag draufzuschlagen ...
Das ist doch auch nicht umständlicher als mein Ansatz :-)
Hallo ,
Ist es sinnvoller das ganze mit PHP zu machen??
LG
Kohlar
@@Kohlar:
nuqneH
Ist es sinnvoller das ganze mit PHP zu machen??
Nein, das ist es sicher nicht. ↗https://forum.selfhtml.org/?t=216085&m=1480871
Qapla'
Hallo,
Mein Ansatz war, so lange 1 Tag draufzuschlagen ...
Das ist doch auch nicht umständlicher als mein Ansatz :-)
die 2 Ansätze ergeben aber unterschiedliche Wochentage, wenn man vom Freitag kommt.
Gruß
Kalk