Эта строка:
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 .
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp()) / 60
Это самый простой способ получить разницу в минутах между двумя DateTime
экземплярами.
Вот исключенный ответ как метод в стиле 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;
}
Я написал две функции, которые просто вычисляют 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;
}
Это прекрасно работает.
function calculateMinutes(DateInterval $int){
$days = $int->format('%a');
return ($days * 24 * 60) + ($int->h * 60) + $int->i;
}
Если вы застряли в положении, где все, что у вас есть, это DateInterval
, и вы (как и я) обнаруживаете, что, кажется, нет никакого способа получить общее количество минут, секунд или что-то из интервала, решение заключается чтобы создать DateTime в нулевое время, добавьте к нему интервал, а затем получите полученную метку времени:
$timeInterval = //the DateInterval you have;
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp();
$intervalInMinutes = $intervalInSeconds/60; // and so on