PHP getTimestamp не работает при добавлении 100 лет [дубликат]

У меня есть другая перспектива ответить на это.

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

public class MyController
{
    private ServiceA serviceA;
    private ServiceB serviceB;

    public MyController(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }

    public void MyMethod()
    {
        // We don't need to check null because the dependency injection container 
        // injects it, provided you took care of bootstrapping it.
        var someObject = serviceA.DoThis();
    }
}
23
задан Shoe 4 May 2011 в 06:54
поделиться

4 ответа

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

2147483648 seconds ~ 68.1 years

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

19
ответ дан Matthew Scharley 27 August 2018 в 19:14
поделиться

из-за ограничения типа данных 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 (). "

3
ответ дан DhruvPathak 27 August 2018 в 19:14
поделиться

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

1
ответ дан pocketfullofcheese 27 August 2018 в 19:14
поделиться

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

19
ответ дан Sander Marechal 27 August 2018 в 19:14
поделиться
Другие вопросы по тегам:

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