2016-07-06 87 views
2

我有問題。我的第一個IF聲明不起作用,但我的否則如果和我的否則聲明做的工作,我不明白爲什麼。我的第一個IF不工作,但我的其他部分如果和其他部分工作javascript

(function(){ 
    var dateHeure = new Date().getHours(); 
    var dateHeure = dateHeure.toString(); 
    var $p = document.querySelectorAll('.change')[0]; 

    console.log($texte); 

    if (dateHeure >= "6" && dateHeure < "11"){ 
     $texte = "Good morning"; 
    } 
    else if (dateHeure >= "11" && dateHeure < "14"){ 
     $texte = "Enjoy your meal"; 
    } 
    else if (dateHeure >= "14" && dateHeure < "18"){ 
     $texte = "Good afternoon"; 
    } 
    else if (dateHeure >= "18" && dateHeure < "22"){ 
    $texte = "Good evening"; 
    } 
    else { 
     $texte = "Good night"; 
    } 
    $p.innerHTML=$texte + ", World"; 
})(); 

編輯:

這裏是完美的作品對我的代碼。我確實喜歡你所說的,我停止將時間轉換爲字符串,現在可以:

(function(){ 
var dateHeure = new Date().getHours(); 
var dateHeure = dateHeure.toString(); 
var $p = document.querySelectorAll('.change')[0]; 
var $texte = ""; 


if (dateHeure >= 6 && dateHeure < 11){ 
    $texte = "Good morning"; 
} 
else if (dateHeure >= 11 && dateHeure < 14){ 
    $texte = "Enjoy your meal"; 
} 
else if (dateHeure >= 14 && dateHeure < 18){ 
    $texte = "Good afternoon"; 
} 
else if (dateHeure >= 18 && dateHeure < 22){ 
    $texte = "Good evening"; 
} 
else { 
    $texte = "Good night"; 
} 
$p.innerHTML=$texte + ", World"; 
})(); 
+3

爲什麼數字轉換爲字符串,如果你需要的數字來比較? –

回答

0

您正在使用字符串而不是數字。考慮值是否爲"7",則"7" > "6"爲真,但"7" < "11"爲假,因爲字符串是逐字比較的。

只需刪除行var dateHeure = dateHeure.toString();並更改所有比較以使用數字,然後代碼應按預期工作。

0

問題是,您將整數轉換爲字符串,然後嘗試檢查該範圍內的字符串,但在這種情況下沒有範圍要比較。

執行一系列字符串的唯一方法是將字符串存儲在數組或類似字符串中,然後將當前字符串(您的時間)與每個條目進行比較。不過,我建議不要這樣做,因爲它似乎是一個很長的取得你想要的方式。

如果我想象的只會在非常特定的條件下工作,例如當前時間爲「11」,但如果當前時間爲「6」,則這將應用於if語句。但其他方法會起作用,因爲它在所有if語句失敗(大多數情況下都會失敗)的情況下執行。不過,如果你想要的工作我建議使用這樣的:

(function(){ 
var dateHeure = new Date().getHours(); 
var $p = document.querySelectorAll('.change')[0]; 

console.log($texte); 

if (dateHeure >= 6 && dateHeure < 11){ 
    $texte = "Good morning"; 
} 
else if (dateHeure >= 11 && dateHeure < 14){ 
    $texte = "Enjoy your meal"; 
} 
else if (dateHeure >= 14 && dateHeure < 18){ 
    $texte = "Good afternoon"; 
} 
else if (dateHeure >= 18 && dateHeure < 22){ 
    $texte = "Good evening"; 
} 
else { 
    $texte = "Good night"; 
} 
$p.innerHTML=$texte + ", World"; 
})(); 

在這裏我得到的小時數之日起,如你,但不能將其轉換爲字符串,而是比較反對整數值的範圍(例如大於或等於6且小於11)。

0

您正在對要比較爲數字的值執行字符串比較。這是一個等待發生的事故(正如你發現的那樣)。

Date.getHours()爲您提供了一個整數值,應該被用於如你的目標,這完美的作品:

<p class="change"></p> 
<script> 
var $texte; 
(function(){ 
var dateHeure = new Date().getHours(); 
//dateHeure = 10; // for testing 
//dateHeure = dateHeure.toString(); // don't ! 
var $p = document.querySelectorAll('.change')[0]; 

console.log($texte); 

if ( dateHeure < 6 
     || dateHeure >=22) { $texte = "Good night"; } 
else if (dateHeure < 11) { $texte = "Good morning"; } 
else if (dateHeure < 14) { $texte = "Enjoy your meal"; } 
else if (dateHeure < 18) { $texte = "Good afternoon"; } 
else      { $texte = "Good evening"; } 

$p.innerHTML=$texte + ", World"; 
})(); 
</script> 
1

雖然你已經知道了,是什麼問題,

爲什麼要將數字轉換爲字符串,如果您需要數字進行比較?

我建議使用不同類型的比較而不重複某些部分。

您以非常小的值開始比較(在6點之前)並且向上到一天結束。你現在只需要檢查較小的。沒有必要進行更大或相等的檢查。

(function() { 
 
    var dateHeure = new Date().getHours(), 
 
     texte; 
 

 
    if (dateHeure < 6) { 
 
     texte = "Good night"; 
 
    } else if (dateHeure < 11) { 
 
     texte = "Good morning"; 
 
    } else if (dateHeure < 14) { 
 
     texte = "Enjoy your meal"; 
 
    } else if (dateHeure < 18) { 
 
     texte = "Good afternoon"; 
 
    } else if (dateHeure < 22) { 
 
     texte = "Good evening"; 
 
    } else { 
 
     texte = "Good night"; 
 
    } 
 
    console.log(texte + ", World"); 
 
})();

+1

這真的很乾淨,很好地完成。我覺得這是值得選擇的答案。 – DibsyJr

相關問題