2017-02-01 17 views
1

Wie könnte ich den Code document.write(" until the the designated date") zu dem Datum in writeMessage(date) ändern? Auch das Datum in writeMessage(date) läuft nicht richtig durch (nur das Jahr kommt durch). Danke für jede Hilfe, die das repariert!JavaScript Dates

function beginMessage(number, timeType) { 
 
    if (number > 0) { 
 
    document.write("There are "); 
 
    document.write(number); 
 
    document.write(" "); 
 
    document.write(timeType); 
 
    document.write(" until the designated date."); 
 
    document.write("<br>"); 
 
} else { 
 
    number = -number; 
 
    document.write("There have been "); 
 
    document.write(number); 
 
    document.write(" "); 
 
    document.write(timeType); 
 
    document.write(" since the designated date."); 
 
    document.write("<br>"); 
 
} 
 

 
    if (((timeType === undefined || number === undefined || isNaN(number)))) { 
 
    document.body.innerHTML = ""; 
 
    } 
 
} 
 

 
function writeMessage(date) { 
 
    clearDocument(); 
 
    var today = new Date(); 
 
    var calculateDate = new Date(date); 
 

 
    var milliseconds = calculateDate.getTime() - today.getTime(); 
 

 
    beginMessage(milliseconds, "milliseconds"); 
 

 
    var seconds = milliseconds/1000; 
 
    seconds = parseInt(seconds); 
 

 
    beginMessage(seconds, "seconds"); 
 

 
    var minutes = seconds/60; 
 
    minutes = parseInt(minutes); 
 

 
    beginMessage(minutes, "minutes"); 
 

 
    var hours = minutes/60; 
 
    hours = parseInt(hours); 
 

 
    beginMessage(hours, "hours"); 
 

 
    var days = hours/24; 
 
    days = parseInt(days); 
 

 
    beginMessage(days, "days"); 
 

 
    var weeks = days/7; 
 
    weeks = parseInt(weeks); 
 

 
    beginMessage(weeks, "weeks"); 
 

 
    if ((date === undefined || isNaN(date))) { 
 
    document.body.innerHTML = ""; 
 
    } 
 

 
    setTimeout("writeMessage('" + date + "');", 1); 
 
} 
 

 
function clearDocument() { 
 
    document.body.innerHTML = ""; 
 
} 
 

 

 

 
writeMessage("2017-07-04");

+1

Sie müssen etwas verwenden, das beginMessage lesen kann. Also entweder eine (globale) Variable oder ein anderer Parameter in beginMessage: 'beginMessage (Millisekunden," Millisekunden ", Datum);' – Shilly

+0

'document.write' ist 20. Jahrhundert, und für diese Art von Ausgabe ist es wahrscheinlich nicht einmal annähernd nützlich –

+0

Vielen Dank für Ihre Hilfe! –

Antwort

0

Wie ich im Kommentar schrieb:

// 'global' variable that both beginMessage and writeMessage can access 
var writtenDate = null; 

function beginMessage(number, timeType) { 
    if (number > 0) { 
    ... 
    document.write(" until " + writtenDate); 
    ... 
} else { 
    ... 
} 
} 

function writeMessage(date) { 
    // save the date sent to this function is the variable, so beginMessage can see it as well. 
    writtenDate = date; 
    ... 
} 

function clearDocument() { 
    document.body.innerHTML = ""; 
} 

writeMessage("2017-07-04"); 

// OR preferably: an extra parameter. 

function beginMessage(number, timeType, designatedDate) { 
    if (number > 0) { 
    ... 
    document.write(" until " + designatedDate); 
    ... 
} else { 
    ... 
} 

function writeMessage(date) { 
    ... 
    beginMessage(milliseconds, "milliseconds", date); 
    ... 
    beginMessage(seconds, "seconds", date); 
    ... 
    beginMessage(minutes, "minutes", date); 
    ... 
    beginMessage(hours, "hours", date); 
    ... 
    beginMessage(days, "days", date); 
    ... 
    beginMessage(weeks, "weeks", date); 
    ... 
} 

... 

writeMessage("2017-07-04"); 
0

Shilly den größten Teil der Antwort hat. In Bezug auf:

nur das Jahr durch

kommt Wenn Sie document.write, nachdem die Seite der gesamte Dokument löscht es zuerst fertig ist, Laden nennen, darunter das Skript, das es nannte. Irgendwann wird das Dokument geladen und Sie löschen das Skript, so dass es nicht mehr ausgeführt werden kann. Sie sehen, was an dieser Stelle auf die Seite geschrieben wird.

So:

  1. nicht document.write Verwenden Sie, zeigen Sie Ihre Ausgabe auf eine andere Weise (zB element.textContent)
  2. Wenn Sie es verwenden müssen, einen einzelnen String konstruieren und verwenden einen einzigen document.write, während die Seite
  3. Laden Sie es nicht aufrufen, nachdem die Seite geladen wurde, wenn Sie das gesamte Dokument
  4. löschen möchten

Schließlich ist Ihre Datumsarithmetik gebrochen. new Date("2017-07-04") analysiert die Zeichenfolge als UTC, sodass der Zeitunterschied durch den Zeitzonenoffset des Hostsystems angepasst wird. Gut, wenn es auf UTC + 0000 eingestellt ist, aber nicht anders.