вычитание даты JavaScript

I‘ve создал Класс обслуживания в моей текущей company’s служебной библиотеке для этих видов проблем:

public class Service implements Runnable {

    private boolean shouldStop = false;

    public synchronized stop() {
        shouldStop = true;
        notify();
    }

    private synchronized shouldStop() {
        return shouldStop;
    }

    public void run() {
        setUp();
        while (!shouldStop()) {
            doStuff();
            sleep(60 * 1000);
        }
    }

    private synchronized sleep(long delay) {
        try {
            wait(delay);
        } catch (InterruptedException ie1) {
            /* ignore. */
        }
    }

}

, Конечно, это совсем не завершено, но необходимо получить суть. Это позволит Вам просто звонить stop() метод, когда Вы захотите, чтобы программа остановилась, и это выйдет чисто.

7
задан Hellnar 18 August 2009 в 17:36
поделиться

4 ответа

Номер месяца в функции конструктора даты отсчитывается от нуля, вы должны вычесть единицу, и я думаю, что проще вычислить дельту с использованием метки времени:

function getDayDelta(incomingYear,incomingMonth,incomingDay){
  var incomingDate = new Date(incomingYear,incomingMonth-1,incomingDay),
      today = new Date(), delta;
  // EDIT: Set time portion of date to 0:00:00.000
  // to match time portion of 'incomingDate'
  today.setHours(0);
  today.setMinutes(0);
  today.setSeconds(0);
  today.setMilliseconds(0);

  // Remove the time offset of the current date
  today.setHours(0);
  today.setMinutes(0);

  delta = incomingDate - today;

  return Math.round(delta / 1000 / 60 / 60/ 24);
}


getDayDelta(2008,8,18); // -365
getDayDelta(2009,8,18); // 0
getDayDelta(2009,9,18); // 31
7
ответ дан 6 December 2019 в 10:52
поделиться

(2009,8,18) НЕ 18 августа. 18 сентября.

6
ответ дан 6 December 2019 в 10:52
поделиться

Вы можете вызвать getTime () для каждого объекта даты, а затем вычесть позднее из более раннего. Это даст вам разницу в миллисекундах между двумя объектами. Отсюда легко перейти к дням.

Однако пара сбоев, на которые стоит обратить внимание: 1) переход на летнее время и 2) обеспечение того, чтобы ваше время приходилось из одного часового пояса.

5
ответ дан 6 December 2019 в 10:52
поделиться

Это будет работать лучше, но не работает с отрицательными значениями результата. Вы можете просто проанализировать значения самостоятельно и обработать их.

function getDayDelta(incomingYear,incomingMonth,incomingDay){
var incomingDate = new Date(incomingYear,incomingMonth-1,incomingDay);
var today =   new Date();
today = new Date(Date.parse(today.format("yyyy/MM/dd")));

var delta = incomingDate - today;
if (delta == 0) { return 0; }
var resultDate = new Date(delta);
return resultDate.getDate();
}
//works for the future dates:
alert(getDayDelta(2009,9,10));
alert(getDayDelta(2009,8,19));
alert(getDayDelta(2009, 8, 18));
0
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: