2

希望能在这方面得到一些帮助。我是 JS 的新手。我必须编写一个脚本来询问用户当前的时间。这很容易。如果时间在早上 6 点到 9 点之间,它会给出一定的提示。如果时间在上午 11 点到下午 1 点之间,则另一个提示。如果在下午 5 点到 8 点之间,提示。我的问题是如何让 JS 理解当用户输入让我们说数字 5,它是下午 5 点(晚餐时间)而不是早上 5 点(去吃零食)。请帮我。我的问题有什么解决方案?美国没有人真正使用 24 小时格式,所以我的脚本中的数字 13(下午 1 点)、17(下午 5 点)或 20(晚上 8 点)不起作用。我只能输入 12 小时时间格式。

var hour=prompt("What is the current hour? ","");

  if( hour >= 6 && hour <= 9 ){
    alert("Breakfast is served.");
  }
  else if( hour >=11  && hour <= 13 ){
    alert("Time for lunch.");
  }
  else if( hour >=17  && hour <= 20 ){
    alert("It's dinner time.");
  }
  else {
    alert("Sorry, you'll have to wait, or go get snack.");
  }
4

2 回答 2

1

制作一个解析器来解析 12 > 24 小时你可以这样做:

var hour   = prompt("What is the current hour? ","");
var apm    = hour.replace(/[0-9]/g, '');
var thour  = ""
if(apm = "am"){
  thour = parseInt(hour);
  out(thour);
}
else{
  thour = parseInt(hour) + 12;
  out(thour);
}
out = function(hour) {
(Your Code Here)
}

这就是我所做的一切,输出是一个整数。所以不要管代码。
输出为 24 小时。

于 2013-10-11T05:33:17.643 回答
1

我会使用JavaScript 的 String.match()将字符串与描述小时格式的RegExp进行比较,例如/^(\d{1,2})\s*(am|pm)?$/i. 这个正则表达式意味着:

  • ^匹配字符串的开头
  • (\d{1,2})匹配并捕获 1 或 2 位数字(即 0-9)
  • \s*匹配 0 个或多个空格字符
  • (am|pm)?可选地匹配和捕获'am''pm'
  • $匹配字符串的结尾
  • i最后意味着忽略匹配的大写/小写(即匹配'am''AM'

另外,如果用户没有输入正确的格式,我会围绕提示进行循环。

这是一个完整的示例。

var hour;
var done = false;

while (!done) {
  var answer = prompt("What is the current hour?","");
  var result = answer.match(/^(\d+)\s*(am|pm)?$/i);
  if (result) {
    hour = +result[1];
    if (result[2] && result[2].match(/pm/)) {
      // If pm was specified, add 12
      hour += 12;
    }
    if (hour < 24) {
      done = true;
    }
  }
}

... Your code as before
于 2013-10-11T05:24:10.093 回答