【javascript】現在が朝昼夕晩のいつかを求める

指定した時間になったら指定した背景を替えるjavascriptを作っていて。 朝:5時から8時 5以上8以下 昼:9時から16時   9以上19以下 夕:17時から20時  17以上20以下 晩:21時から4時   21以上4以下 と時間を決めてコードを書いて。分岐文を書く際にいろいろ試行錯誤しているのでメモ

var date = new Date(),
 h = date.getHours(),
 n = '';
ここまでは共通。サーバータイムとるほどの仕組みでもないのでローカルタイム。しかも分秒は気にしない。

if文を使った分岐

if(h>=5 && h<=8){            //5-8
   n = "morning";
 }else if(h>=9 && h<=16){     //9-16
   n = "noon";
 }else if(h>=17 && h<=20){    //17-20
   n = "evening";
 }else{                       //21-4
   n = "night";
 }

三項演算子を使った分岐

n = (h>=5 && h<=8)?  "morning" :
      (h>=9 && h<=16)? "noon":
      (h>=17 && h<=20)?"evening":"night";
見やすいしすっきりしたからこれかなぁ。なんとなく不安が残るけども。

うのくんが考えた別のアプローチの仕方

うのくん: hを4で割って切り上げ 5時から8時 切り上げで2 9時から16時    切り上げで3,4 17時から20時   切り上げで5 21時から24時    切り上げで6 0時から4時     切り上げで1 こうだね n = nn[Math.ceil(h/4)-1]; なのでこうだね

var nn = ["night", "morning", "noon", "noon", "evening", "night"];
  n = nn[Math.ceil(h/4)-1];
おお。。短い。 変数増えたり、マジックナンバー使ってるあたりがネックなので ごめんね今回は不採用。 ただ同じ結果でも別の書き方を見ると感激するなぁ。うむうむ。