毎分更新したい時刻計算機があります。私は、各タイムゾーンの時間を計算する特別な関数を作った
ですが、setTimeout()を使って関数manualTime();を呼び出すと、solveTime()が呼び出されないようです。 (私は2つの関数を使用しなかったときに働いていました)
JS関数はsetIntervalで呼び出されたときに現在時刻で更新されません。
編集:関数が呼び出されたときに関数が更新されていないことがわかりました。何らかの理由で最初にロードされた時刻を常に返します。
var masterTimeUTC = new Date(); //these need to be global for the solveTime to work
var utcHours = masterTimeUTC.getUTCHours();
var utcMinutes = masterTimeUTC.getUTCMinutes();
var utcSeconds = masterTimeUTC.getUTCSeconds();
var utcMinutesLead = masterTimeUTC.getUTCMinutes();
function manualTime() {
//the main show
var masterTimeLocal = new Date(); //this contains everything, so we can mess with it more
var localhours = masterTimeLocal.getHours();
var localminutes = masterTimeLocal.getMinutes();
var localseconds = masterTimeLocal.getSeconds();
//get all the relvant info for this stuff
if (localminutes < 10) {
localminutes = "0" + localminutes;
}
if (localseconds < 10) {
localseconds = "0" + localseconds;
}
if (localhours < 10) {
localhours = "0" + localhours;
} //make it look nice
//solve times based on utc codes
solveTime(0);//utc 0
solveTime(-7); //west
solveTime(-6); //mountain
solveTime(-5); //central
solveTime(-4); //east
solveTime(1); //uk
solveTime(8); //perth
solveTime(9); //adelaide
solveTime(10); //sydney
//use the solveTime function to solve for times. syntax is x
// x is the utc modifier, it can be any number incl. negatives
document.getElementById("clocksingle").innerHTML = localhours + ":" + localminutes + "." + localseconds;
//set the big time on top.
setTimeout(manualTime, 1000);
//run this every second to simulate a real clock
}
function solveAll() {
manualTime();
solveTime(-7);
solveTime(-6);
solveTime(-5);
solveTime(-4);
solveTime(0);
solveTime(8);
solveTime(9);
solveTime(10);
}
//solveTime
//this will handle everything, including am, pm, printing to div, whatever
//the div name is whatever the utc modifier is
function solveTime(x) {
if (x < 0) {
var shift = 24 + x;
} else {
var shift = x;
}
var suffixSolve = (utcHours + shift) % 24;
var suffix = "am";
if (suffixSolve > 12) {
suffix = "pm";
}
if (utcMinutes == 0) {
utcMinutesLead = "00";
}
if (utcMinutes < 10) {
utcMinutesLead = "0" + utcMinutes;
}
var timeSolve = (((utcHours + x) + 11) % 12 + 1);
var timeTotal = timeSolve + ":" + utcMinutesLead + " " + suffix;
var utcMod = x;
if (utcMod > 0) {
utcMod = "+" + utcMod;
}
if (x === 0){
document.getElementById(x).innerHTML = timeTotal;
}
else {
document.getElementById(x).innerHTML = "(UTC" + utcMod + ") " + timeTotal;
}
}
window.onload = function() {
setTimeout(1000);
manualTime();
}
window.onload = function() {
setTimeout(60000);
solveAll();
}
以下
コード編集:私はsolveTime機能にいくつかのコンソール出力を追加
、それはあらゆる秒(setTimeoutをのおかげで)実行しているように見えるが、それはある時刻を更新されていませんから解決する。関数内にnew Date()
を追加しようとしましたが、それも機能しません。
EDIT2:
これは重複しない、関数が細かいと呼ばれています。関数を再実行するたびに、関数内の時間は更新されません。
はあなたの質問ではなく、あなたのサイト上で、それへのリンクであなたのコードを投稿してください。 – Pat
私は質問にコードを追加しました – mark
@marketが本当に必要とする関数は 'setInterval'なので、 'setTimeout()'関数を呼び出すのに重複してマークしてはいけません。 – dperish