Конвертация d.m.Y в UnixTime

Отличная идея подумал я, чтобы хранить дату рождения в одной ячейки. Но есть проблема, а если человек 1969г/р? в униксе только 1.1.1970г.


Ответы (1 шт):

Автор решения: S.H.
  1. у вас же нет необходимости хранить дату рождения с точностью до секунды. Формат unixtime рассчитан как раз на это.

Чтобы воспользоваться этим преимуществом - делаем так: конвертируем, как вы и хотели, d.m.Y в unixtime. Делим на 86400 (число секунд в сутках с точки зрения наивной математики). Если надо хранить "до 70-го года" - считаем разницу между датой рождения и 01.01.1970, РАЗНИЦУ точно так же конвертируем и храним со знаком "минус".

При обратной коннвертации - делаем все в обратном порядке :-)

  1. вас никто не будет хватать за руки, если вы решите, что "ячейка" представляет собой 64-битное, а не 32-битное значение. Кстати, в вопросе Вы этот момент никак не комментируете.

  2. в современных 64 битных юниксах - только - тс, никому! - так и хранится. в 64 бит. А старый формат 32-битного значения оставлен для совместимости.

→ Ссылка