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

Зачем нужен дневной штамп?

У нас, как у людей, странное представление о времени. Позвольте мне показать вам, что я имею в виду.

It is...       Referring to... We say...
1. Jan 20:00.  2. Jan 9:00.    Tomorrow morning
2. Jan 12:00.  1. Jan 20:00.   Yesterday evening

Что мы узнаем из этого? На самом деле нам нужна разница в днях, а не во времени.

Нельзя ли просто разделить временную метку на 86400?

Это будет что-то вроде Math.floor(timestamp / 86400) .

К сожалению нет. Вы должны соблюдать часовой пояс и переход на летнее время.

Как правило, никогда ничего не предполагайте о датах, всегда старайтесь получить каждую деталь из библиотеки дат.

Нельзя ли просто разделить разницу во времени на 86400?

Это будет что-то вроде (timestamp1 — timestamp2) / 86400 .

Но не каждый день - это 24 часа, а расстояние между 23:00 и 4:00 всего 5 часов, но вы все равно скажете завтра.

Как это сделать правильно

Идея Daystamp решает все вышеперечисленные случаи. Это делает сравнения и расчеты различий настолько простыми, насколько это возможно:

daystamp1 == daystamp2 // same day
daystamp2 - daystamp1 // day difference

Вычислите, используя смещение часового пояса.

Это самое простое решение, если ваша библиотека дат дает вам смещение.

В этом примере используется объект JavaScript Date.

function daystamp (date)
{
    const minutes = date.getTime() / 1000 / 60;
    const days = (minutes - date.getTimezoneOffset()) / 60 / 24;
    return Math.floor(days);
}

Это решает проблему перехода на летнее время и смещения часового пояса.

Вычислите, переведя годы в дни

Если вы работаете в среде, которая не знает о смещении часового пояса или не можете его получить по какой-либо причине, вы все равно можете вычислить его, переведя годы в дни. Это означает, что вы сами должны уважать високосные годы, но это не самое сложное.

В этом примере используется объект tm стандартной библиотеки C time.h.

int daystamp (const tm &tm)
{
    int days = tm.tm_yday; // start with day of the year
    days += (tm.tm_year - 70) * 365; // days of year since 1970
    days += (tm.tm_year - 68) / 4; // a day every 4 years since 1972
    days -= (tm.tm_year - 100) / 100; // remove every 100th year
    days += (tm.tm_year - 100) / 400; // add every 400th year
    return days;
}

Вывод

Может быть, я использую неправильную команду поиска или, может быть, это очевидно, но я не нашел большого обсуждения расчета с днями, а не с секундами.

Тем не менее, я думаю, что так проще справляться с календарными различиями.