Почему временные метки имеют ограничение до 2038?

Я только что узнал, запуская сценарий календаря, что метки времени в PHP имеют ограничение до 2038. Что это значит? Почему это 2038 вместо 2050 или 2039? Почему предел, если временные метки просто подсчитывают секунды с заданной даты (1970)?

    Предел налагается четырьмя байтовыми целыми числами, которые большинство библиотек C используют для представления этого счета. Быстрая математика (предполагает 365-дневные годы, а не точно):

    2147483648 seconds ~ 68.1 years 

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

    Максимальное значение 32-разрядного целого составляет 2,147,483,647. Если вы добавите +1 к этому, вы получите -2,147,483,647. 2 147 483 647 секунд с 01-01-1970 00:00:00 – 19 января 2038 года. Если вы добавите еще одну секунду, вы получите дату где-нибудь в 1902 году.

    из-за ограничения типа данных INT на 32-битной машине

    http://php.net/manual/en/function.mktime.php

    От php.net: «Максимально возможная дата, принятая mktime () и gmmktime (), зависит от текущего часового пояса местоположения.

    Например, переполнение 32-битной метки времени происходит в 2038-01-19T03: 14: 08 + 0000Z. Но если вы находитесь в часовом поясе UTC -0500 (например, EST в Северной Америке), максимальное допустимое время перед переполнением (для более ранних версий PHP в Windows) составляет 2038-01-18T22: 14: 07-0500Z, независимо от того, передаете ли вы его mktime () или gmmktime (). "

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