2013-11-23 2 views
0

У меня есть часы обратного отсчета Рождество, который работает отлично, однако, когда он показывает 1 час, он говорит, 1 «Часы работы» не 1 «ЧАС»Форматирование часов - 1 час, много часов

Я знаю, что это немного бит тривиальный, но я бы хотел, чтобы он был правильным и отображал правильные слова.

Не могли бы вы помочь?

Кодекс

<script language="javascript" type="text/javascript"> 
today = new Date(); 
    BigDay = new Date("December 25, 2013") 
    msPerDay = 24 * 60 * 60 * 1000 ; 
     timeLeft = (BigDay.getTime() - today.getTime()); 
     e_daysLeft = timeLeft/msPerDay; 
      daysLeft = Math.floor(e_daysLeft); 
       e_hrsLeft = (e_daysLeft - daysLeft)*24; 
      hrsLeft = Math.floor(e_hrsLeft); 
     minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60); 
     document.write("There's only "+daysLeft+" days, "+hrsLeft+" hours and "+minsLeft+" minutes left until Christmas!"); 
</script> 

Большое спасибо PBrown

+1

Вам нужно добавить в если/другое заявление, которое проверяет для hrsLeft, прежде чем писать эту строку document.write («Там только„+ daysLeft +“ дней, «+ hrsLeft +» часов и «+ minsLeft +» минут до Рождества! »); Если hrsLeft <2, тогда текст должен быть «document.write (« Есть только «+ daysLeft +» дни, «+ hrsLeft +» час и «+ minsLeft +» минуты до Рождества! »); –

ответ

1
today = new Date(); 
BigDay = new Date("December 25, 2013"); 
msPerDay = 24 * 60 * 60 * 1000; 
timeLeft = (BigDay.getTime() - today.getTime()); 
e_daysLeft = timeLeft/msPerDay; 
daysLeft = Math.floor(e_daysLeft); 
e_hrsLeft = (e_daysLeft - daysLeft) * 24; 
hrsLeft = Math.floor(e_hrsLeft); 
minsLeft = Math.floor((e_hrsLeft - hrsLeft) * 60); 
document.write("There's only " + daysLeft + getDayText(daysLeft) + " , " + hrsLeft + getHourText(hrsLeft) + " and " + minsLeft + getMinuteText(minsLeft) + " left until Christmas!"); 

function getHourText(hour) { 
    if (hour > 1) { 
     return " hours"; 
    } 

    return " hour"; 
} 

function getMinuteText(min) { 
    if (min > 1) { 
     return " minutes"; 
    } 

    return " minute"; 
} 

function getDayText(day) { 
    if (day > 1) { 
     return " days"; 
    } 

    return " day"; 
} 

EDIT: выше, конечно, долгий путь сделать это и, безусловно, не является предпочтительным способом для большинства. Вы также можете использовать тройной оператор и сделать что-то вроде этого:

var str = hours + (hours > 1 ? " hours " : " hour ") + "left!"; 
+0

Спасибо за все ваша помощь, Счастливого Рождества и Нового года ... – PBrown

0
function pluralize(num, str){ 
    if(num > 1){ 
     return num+' '+str+'s'; 
    } 
    return num+' '+str; 
} 

Использование

var hrsLeft = 20; 
pluralize(hrsLeft, 'hour'); 

Возвращает

20 hours 

Это очень простое и существует более полная версия этой функции.

Смотрите здесь для полного pluralize

+0

Спасибо за вашу помощь , Счастливого Рождества и С Новым Годом .... – PBrown

+0

Хе-хе, спасибо, ты тоже. –

1

(как примечание стороны, you probably shouldn't usedocument.write).

Это отличное место для использования JS's ternary operator.

var hoursStr = hrsLeft === 1 ? hrsLeft + 'hour' : hrsLeft + 'hours'; 
+0

Спасибо за вашу помощь, Счастливого Рождества и С Новым Годом .... – PBrown

Смежные вопросы