получить PHP DateInterval в общей сложности "минут"

Эта строка:

private dynamic defaultReminder = 
                          reminder.TimeSpanText[TimeSpan.FromMinutes(15)];

Вы не можете использовать переменную экземпляра для инициализации другой переменной экземпляра . Зачем? Поскольку компилятор может их переупорядочить, нет гарантии, что reminder будет инициализирован до defaultReminder, поэтому вышеприведенная строка может выбросить NullReferenceException.

Вместо этого, просто используйте:

private dynamic defaultReminder = TimeSpan.FromMinutes(15);

В качестве альтернативы настройте значение в конструкторе:

private dynamic defaultReminder;

public Reminders()
{
    defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)]; 
}

. Более подробная информация об этой ошибке компилятора в MSDN - Ошибка компилятора CS0236 .

29
задан Rana 27 May 2013 в 15:31
поделиться

5 ответов

abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp()) / 60

Это самый простой способ получить разницу в минутах между двумя DateTime экземплярами.

61
ответ дан deceze 27 May 2013 в 15:31
поделиться

Вот исключенный ответ как метод в стиле PHP7.2:

/**
 * @param \DateTime $a
 * @param \DateTime $b
 * @return int
 */
public static function getMinutesDifference(\DateTime $a, \DateTime $b): int
{
    return abs($a->getTimestamp() - $b->getTimestamp()) / 60;
}
0
ответ дан Sebastian Viereck 27 May 2013 в 15:31
поделиться

Я написал две функции, которые просто вычисляют totalTime из DateInterval. Точность может быть увеличена с учетом лет и месяцев.

function getTotalMinutes(DateInterval $int){
    return ($int->d * 24 * 60) + ($int->h * 60) + $int->i;
}

function getTotalHours(DateInterval $int){
    return ($int->d * 24) + $int->h + $int->i / 60;
}
11
ответ дан Genmais 27 May 2013 в 15:31
поделиться

Это прекрасно работает.

function calculateMinutes(DateInterval $int){
    $days = $int->format('%a');
    return ($days * 24 * 60) + ($int->h * 60) + $int->i;
}
2
ответ дан ggallego 27 May 2013 в 15:31
поделиться

Если вы застряли в положении, где все, что у вас есть, это DateInterval, и вы (как и я) обнаруживаете, что, кажется, нет никакого способа получить общее количество минут, секунд или что-то из интервала, решение заключается чтобы создать DateTime в нулевое время, добавьте к нему интервал, а затем получите полученную метку времени:

$timeInterval      = //the DateInterval you have;
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp();
$intervalInMinutes = $intervalInSeconds/60; // and so on
17
ответ дан Neil Townsend 27 May 2013 в 15:31
поделиться
Другие вопросы по тегам:

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