获取当前时间javascript + 1小时(分钟错误)

时间:2018-06-27 14:00:07

标签: javascript time

您好,我目前正在运行一个脚本,该脚本显示了当前时间+ 1小时,我遇到的问题是,在前9分钟中的每一小时,0都没有显示*,并且我以某种方式找不到解决方案。

*示例:上午9:1而非上午9:01

我喜欢Moments.js,但在这种情况下,我不能使用外部库

var now = new Date;
now.setHours(now.getHours() + 1);
var isPM = now.getHours() >= 12,
  isMidday = 12 == now.getHours(),
  result = document.querySelector("#result"),
  time = [now.getHours() - (isPM && !isMidday ? 12 : 0), now.getMinutes() || "00"].join(":") + (isPM ? " pm" : "am");

function addTime(t) {
  for (var s in t) {
    var e = s.substr(0, 1).toUpperCase() + s.substr(1);
    this["set" + e](this["get" + e]() + t[s])
  }
  return this
}

function showTime(t) {
  var s = function() {
    return this < 10 ? "0" + this : this
  };
  if (t) return [s.call(this.getHours()), s.call(this.getMinutes()), s.call(this.getSeconds())].join(":");
  var e = this.getHours() >= 12,
    i = 12 == this.getHours();
  return time = [s.call(this.getHours() - (e && !i ? 12 : 0)), s.call(this.getMinutes()), s.call(this.getSeconds())].join(":") + (e ? " pm" : " am")
}
result.innerHTML = time;
<script>
var today=new Date,dd=today.getDate(),mm=today.getMonth()+1,yyyy=today.getFullYear().toString().substr(-2);dd<10&&(dd="0"+dd),mm<10&&(mm="0"+mm),today=mm+"/"+dd+"/"+yyyy,document.write(today);
</script>
		
<span id="result"></span>

3 个答案:

答案 0 :(得分:3)

看起来很多代码实际上没有被调用,看起来只有影响输出的行是这些:

var now = new Date;
now.setHours(now.getHours() + 1);
var isPM = now.getHours() >= 12, isMidday = 12 == now.getHours(), result = document.querySelector("#result"),
time = [now.getHours() - (isPM && !isMidday ? 12 : 0), now.getMinutes() || "00"].join(":") + (isPM ? " pm" : "am");
result.innerHTML = time;

最相关的块是:

now.getMinutes() || "00"

在您的示例中获得未填充分钟的原因是因为您仅在now.getMinutes()恰好为0的情况下处理,跳过了1-9的情况。为了解决这个问题,您可以简单地执行以下操作:

(now.getMinutes() < 10) ? "0" + now.getMinutes() : "" + now.getMinutes()

正如其他人所暗示的那样,正确格式化日期并进行日期算术可以pretty tricky,尤其是在处理诸如时区和不同区域设置之类的情况时。使用Moment.js之类的库是一个好主意。

答案 1 :(得分:2)

不是解决代码中问题的实际答案,但是为什么不使用类似https://momentjs.com/的东西呢?

var timeToShow = moment().add(1, 'hour').format('h:mma');  //9:02am

答案 2 :(得分:1)

您的问题在时间分配声明中。对now.getMinutes()的调用不会将分钟1-9返回为“ 01”,“ 02”,...,而是将它们返回为“ 1”,“ 2”等。