Как разместить ярлык ионного приложения на главном экране Android

Начиная с этой записи, только один из других ответов правильно обрабатывает переходы DST (переход на летнее время). Вот результаты по системе, расположенной в Калифорнии:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000

Хотя Math.round возвращает правильные результаты, я думаю, что это несколько неуклюже. Вместо этого, явно учитывая изменения смещения UTC, когда DST начинается или заканчивается, мы можем использовать точную арифметику:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));

Объяснение

Расчеты по дате JavaScript сложны, потому что Date объекты хранятся раз в UTC, а не по местному времени. Например, 3/10/2013 12:00 AM Тихоокеанское стандартное время (UTC-08: 00) хранится как 3/10/2013 8:00 AM UTC и 3/11/2013 12:00 AM Pacific Daylight Time ( UTC-07: 00) хранится как 3/11/2013 7:00 UTC. В этот день, полуночи до полуночи по местному времени - всего 23 часа в UTC!

Хотя день в местное время может иметь более или менее 24 часов, в режиме UTC всегда будет ровно 24 часа.1 Метод daysBetween, показанный выше, использует этот факт, сначала позвонив treatAsUTC, чтобы отрегулировать оба местных времени до полуночи UTC, прежде чем вычитать и делить.

1. JavaScript игнорирует секунды прыжка.

0
задан Nick Rozhdesvenski 13 July 2018 в 11:26
поделиться