簡體   English   中英

if和else語句都一起執行

[英]Both the if and else statement are executing together

我已為示例修改了此代碼,因此日期和時間當前不會自行更新。 基本解釋是:有一個計數器跟蹤當前時間並每秒刷新一次,將其推送到DOM的元素。 但是我想為時間在一天中的兩個特定時間之間執行代碼。 這些時間是在setDrwBrks函數中定義的,如下所示:

  mBrkStrt.setHours( 9, 50, 0 ); mBrkEnd.setHours( 10, 3, 0 );

  dBrkStrt.setHours( 12, 17, 0 ); dBrkEnd.setHours( 12, 30, 0 );

  eBrkStrt.setHours( 17, 50, 0 ); eBrkEnd.setHours( 18, 3, 0 );

  nBrkStrt.setHours( 22, 2, 0 ); nBrkEnd.setHours( 22, 15, 0 );

這是我在fndNxtDrwBrk( date )函數中的問題代碼:

  for( j = 0; j < 4; j++ ) {
    if( date > strtDrwBrks[ j ] && date < endDrwBrks[ j ] ) {
      dspl.textContent += '... First statement executed';
    }
    else {   
      document.querySelector( 'footer' ).textContent = 'why is this also executed?';
    }
  }

這里的目標是在date時間介於strtDrwBrks[ j ]endDrwBrks[ j ]時間之間時執行if語句。 在我的代碼段中,這是因為我已經在我的pushDates()函數中手動將時間設置為9:51 AM:

  ////Control current time 
  today.setDate( 8 );
  today.setHours( 9 );
  today.setMinutes( 51 );

因此,在9:50 am到10:03 am之間,應執行此代碼,而且確實如此。 但是我的else語句也會執行。 這就是問題。 有什么想法為什么會發生以及如何解決? 我已經在這工作了好幾個小時了。

 'use strict'; // ///////////////////////////// INITIAL /////////////////////////////////// // function leading_0( num ) { if( num < 10 ) { num = '0' + num; } return num; } // ////////////////////////////// DATES //////////////////////////////////// // function getCurrentTime( date ) { // TIME / / / / / / / / / / / / / / / / / // var hours = date.getHours(), minutes = date.getMinutes(), seconds = date.getSeconds(), suffix = hours >= 12 ? 'PM' : 'AM', fullTime; hours = hours % 12; if( hours === 0 ){ hours = 12; } minutes = leading_0( minutes ); seconds = leading_0( seconds ); fullTime = hours + ':' + minutes + ':' + seconds + ' ' + suffix; return fullTime; } // \\\\/ / / / / / / / / / / / / / / TIME / / / / / / / / / / / / / / / / / // function getYear( date ) { /// / / / YEAR / / / / / / / / / / / / / / / / / // var year = date.getFullYear(); return year; } // \\\\/ / / / / / / / / / / / / / / YEAR / / / / / / / / / / / / / / / / / // function getMonthDay( date ) { /// MONTH DAY / / / / / / / / / / / / / / / /// var day = date.getDate(); return day; } // \\\\/ / / / / / / / / / / / / / MONTH DAY / / / / / / / / / / / / / / / /// function getMonth( date ) { // / / / MONTH / / / / / / / / / / / / / / / / /// var months = [ 'January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ], month = months[ date.getMonth() ]; return month; } // \\\\/ / / / / / / / / / / / / / / MONTH / / / / / / / / / / / / / / / / /// function getWkDay( date ) { /// / / WEEK DAY / / / / / / / / / / / / / / / /// var weekdays = [ 'Sunday', 'Monday', 'Tueday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], wkDay = weekdays[ date.getDay() ]; return wkDay; } // \\\\ / / / / / / / / / / / / / / WEEK DAY / / / / / / / / / / / / / / / /// function callBySec( func ) { setInterval( func, 1000 ); } function pushDate() { // / / / / / PUSH DATES / / / / / / / / / / / / / / / // var today = new Date(), wkDay, month, day, year, time, d = document; ////Control current time today.setDate( 8 ); today.setHours( 9 ); today.setMinutes( 51 ); wkDay = getWkDay( today ); month = getMonth( today ); day = getMonthDay( today ); year = getYear( today ); time = getCurrentTime( today ); d.getElementById( 'wkDay' ).textContent = wkDay; d.getElementById( 'month' ).textContent = month; d.getElementById( 'day' ).textContent = day; d.getElementById( 'year' ).textContent = year; d.getElementById( 'time' ).textContent = time; return today; } // \\\\/ / / / / / / / / / / / / / PUSH DATES / / / / / / / / / / / / / / / // function nextDate( startDate, dates ) { // NEXT DATE / / / / / / / / / / / / / var startTime = + startDate, nearestDate, nearestDiff = Infinity, i, n, diff; for( i = 0, n = dates.length; i < n; ++i ) { diff = + dates[ i ] - startTime; if( diff > 0 && diff < nearestDiff ) { nearestDiff = diff; nearestDate = dates[ i ]; } } return nearestDate; } // \\\\ / / / / / / / / / / / / / / / / / NEXT DATE / / / / / / / / / / / / // function setDrwBrks() { // / / / SET DRAW BREAKS / / / / / / / / / / / / / / / var today = pushDate(), mBrkStrt = pushDate(), mBrkEnd = pushDate(), dBrkStrt = pushDate(), dBrkEnd = pushDate(), eBrkStrt = pushDate(), eBrkEnd = pushDate(), nBrkStrt = pushDate(), nBrkEnd = pushDate(), strtDrwBrks = [], endDrwBrks = [], drwBrksColl = []; mBrkStrt.setHours( 9, 50, 0 ); mBrkEnd.setHours( 10, 3, 0 ); dBrkStrt.setHours( 12, 17, 0 ); dBrkEnd.setHours( 12, 30, 0 ); eBrkStrt.setHours( 17, 50, 0 ); eBrkEnd.setHours( 18, 3, 0 ); nBrkStrt.setHours( 22, 2, 0 ); nBrkEnd.setHours( 22, 15, 0 ); strtDrwBrks.push( mBrkStrt ); endDrwBrks.push( mBrkEnd ); strtDrwBrks.push( dBrkStrt ); endDrwBrks.push( dBrkEnd ); strtDrwBrks.push( eBrkStrt ); endDrwBrks.push( eBrkEnd ); strtDrwBrks.push( nBrkStrt ); endDrwBrks.push( nBrkEnd ); drwBrksColl.push( strtDrwBrks ); drwBrksColl.push( endDrwBrks ); return drwBrksColl; } // \\\\/ / / / / / / / / / / / / SET DRAW BREAKS / / / / / / / / / / / / / /// function fndNxtDrwBrk( date ) { // FIND NEXT DRAW BREAK / / / / / / / / / / /// date = pushDate(); var drwBrks = setDrwBrks(), nxtDrwBrk = nextDate( date, drwBrks[ 0 ] ), strtDrwBrks = drwBrks[ 0 ], endDrwBrks = drwBrks[ 1 ], i, j, day, dspl = document.getElementById( 'dspl' ), dspl2 = document.getElementById( 'dspl-2' ); if( nxtDrwBrk === undefined ) { for( i = 0; i < 4; i++ ){ drwBrks[ 0 ][ i ].setDate( date.getDate() + 1 ); } nxtDrwBrk = nextDate( date, drwBrks[ 0 ] ); } day = nxtDrwBrk.getDay(); if( day === 0 ) { nxtDrwBrk.setDate( nxtDrwBrk.getDate() + 1 ); nxtDrwBrk.setHours( 9, 50, 0 ); } for( j = 0; j < 4; j++ ) { if( date > strtDrwBrks[ j ] && date < endDrwBrks[ j ] ) { dspl.textContent += '... First statement executed'; } else { document.querySelector( 'footer' ).textContent = 'why is this also executed?'; } } return nxtDrwBrk; } // \\\\ / / / / / / / / / / / / FIND NEXT DRAW BREAK / / / / / / / / / / / /// // ////////////////////////////// START //////////////////////////////////// // function start() { var today = pushDate(); pushDate(); callBySec( pushDate ); fndNxtDrwBrk( today ); } start(); 
 .remove { display: none; } 
 <p id="dspl"> <span id="wkDay"></span>, <span id="month"></span> <span id="day"></span>, <span id="year"></span> <b>|</b> <span id="time"></span> </p> <p id="dspl-2" class="remove"> Secondary Text </p> <footer></footer> 

PS。 控制台中的錯誤是因為我使用////Control current time注釋下的代碼手動將時間更改為測試時間之間的范圍。 刪除它,控制台將安靜。 不知道如何為該代碼段設置時間而不遇到該錯誤,嘗試修復,但這是一個單獨的問題,實際上不需要修復,因為將其設置為關閉的代碼僅用於此演示。

您正在四個不同的時間間隔之間進行迭代。 時間不能在您的第一個間隔和第二個間隔之間,並且不能同時在第三個和第四個間隔之間。

例如:12.30在10.10和13.20之間,但不在15.20和16.40之間。因此,當要測試它是否在第二時間間隔之間時,它將轉到else語句。 當您測試4個間隔(循環4次)時,它將轉到其他3次,因為只有一個間隔包含實際的小時數。

因此,假設您想知道它是否在四個間隔之一之間。

創建了一個boolean isBetweenOneInterval ,它被isBetweenOneInterval設置為false。 然后在您的插入之間進行迭代。

If time is between interval

isBetweenOneInterval設置為true

循環結束后,檢查isBetweenOneInterval是否為true

如果isBetweenIntervaltrue ,則在間隔之間進行操作。 如果不是,請在間隔之間不進行操作,例如,隱藏包含倒數的div。

放入代碼中意味着:

var isBetweenOneInterval = false;

 for( j = 0; j < 4; j++ ) {
    if( date > strtDrwBrks[ j ] && date < endDrwBrks[ j ] ) {
     isBetweenOneInterval = true;
    }
  }

if (isBetweenOneInterval == true)
{
 //// DO WHAT YOU WANT IF THE CURRENT TIME IS BETWEEN AN INTERVAL
}
else
{
 ///// DO WHAT YOU WANT IF THE CURRENT TIME ISN'T BETWEEN ANY INTERVAL
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM