Получить текущее время JavaScript + 1 час (минутная ошибка) - PullRequest
0 голосов
/ 27 июня 2018

Привет, у меня сейчас запущен скрипт, который показывает текущее время + 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 голосов
/ 27 июня 2018

Ваша проблема в отчете о назначении на время. Вызов now.getMinutes () не возвращает минуты 1-9 как «01», «02», ..., он возвращает их как «1», «2» и т. Д.

0 голосов
/ 27 июня 2018

Похоже, что большая часть вашего кода на самом деле не вызывается, похоже, только строки, которые влияют на вывод, таковы:

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()

Как уже упоминали другие, правильное форматирование дат и арифметика дат могут быть довольно хитрыми , особенно если вы работаете с такими вещами, как часовые пояса и разные локали. Использование такой библиотеки, как Moment.js , действительно хорошая идея.

0 голосов
/ 27 июня 2018

Не фактический ответ для решения проблемы в вашем коде, но почему бы вам не использовать что-то вроде https://momentjs.com/?

var timeToShow = moment().add(1, 'hour').format('h:mma');  //9:02am
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...