您好,我目前正在运行一个脚本,该脚本显示了当前时间+ 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>
答案 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”等。