Проблема с вашим кодом в том, что он просто сравнивает времена, а не даты, поэтому очевидно, что в вашем примере время начала больше, чем время окончания. Попробуйте следующий пример, он отлично работает.
<?php
$TodayDate = date("Y-m-d");
$start = $TodayDate.' 20:00:00';
$TomorrowDate = new DateTime('tomorrow');
$TomorrowDate = $TomorrowDate->format('Y-m-d');
$end = $TomorrowDate.' 07:59:59'; //need to show until tomorrow time.
$time = strtotime($start);
$timeStop = strtotime($end);
while($time<$timeStop) {
echo date('H:i', $time);
$time = strtotime('+30 minutes', $time);
echo ' - ' . date('H:i', $time) . '<br/>';
}
?>
20:00 - 20:30
20:30 - 21:00
21:00 - 21:30
21:30 - 22:00
22:00 - 22:30
22:30 - 23:00
23:00 - 23:30
23:30 - 00:00
00:00 - 00:30
00:30 - 01:00
01:00 - 01:30
01:30 - 02:00
02:00 - 02:30
02:30 - 03:00
03:00 - 03:30
03:30 - 04:00
04:00 - 04:30
04:30 - 05:00
05:00 - 05:30
05:30 - 06:00
06:00 - 06:30
06:30 - 07:00
07:00 - 07:30
07:30 - 08:00
Если любой из HttpContext, HttpContext. Текущий, HttpContext. Текущий. Ответ или Http. Текущий. Ответ. Cookie являются пустыми, Вы уже в беде. Позвольте исключению произойти и зафиксировать Ваш веб-сервер.
мог попробовать:
if(HttpContext.Current != null &&
HttpContext.Current.Response != null &&
HttpContext.Current.Response.Cookies != null &&
HttpContext.Current.Response.Cookies[authCookieName] != null)
{
// do your thing
}
HttpContext. Текущий. Ответ. Cookie никогда не будут пустыми. Единственная вещь, которая может вызвать пустой указатель, состоит в том, если cookie, который Вы ожидаете, не существует, таким образом, первое корректно. HttpContext. Текущий было бы пустым, если бы Вы не принимали веб-запрос хотя :)
Оба хороши. Предположение, что Вы уже проверили все остальное, что должно быть проверено сначала. Например:
private bool CheckSuspendersAndBelt()
{
try
{
//ensure that true is true...
if (true == true)
{
//...and that false is false...
if (false == false)
{
//...and that true and false are not equal...
if (false != true)
{
//don't proceed if we don't have at least one processor
if (System.Environment.ProcessorCount > 0)
{
//and if there is no system directory then something is wrong
if (System.Environment.SystemDirectory != null)
{
//hopefully the code is running under some version of the CLR...
if (System.Environment.Version != null)
{
//we don't want to proceed if we're not in a process...
if (System.Diagnostics.Process.GetCurrentProcess() != null)
{
//and code running without a thread would not be good...
if (System.Threading.Thread.CurrentThread != null)
{
//finally, make sure instantiating an object really results in an object...
if (typeof(System.Object) == (new System.Object()).GetType())
{
//good to go
return true;
}
}
}
}
}
}
}
}
}
return false;
}
catch
{
return false;
}
}
(извините, не мог сопротивляться... :))
Первый пример, который Вы дали, более чем достаточно. Как упомянутый, если какой-либо из других объектов является пустым, существует проблема с ASP.NET.
if (HttpContext.Current.Response.Cookies[authCookieName] != null) {
HttpContext.Current.Response.Cookies[authCookieName].Value = "New Value";
}
А скорее, чем замусоривание Вашего кода с ними часто много проверок, необходимо создать некоторые родовые функции как SetCookie, GetCookie, GetQueryString и GetForm, и т.д. которые принимают имя и значение (для Функций множества) как параметры, обрабатывают пустую проверку, и возвращает значение, или пустая строка (для Получают Функции). Это сделает Ваш код намного легче поддержать и возможно улучшиться, и если Вы решаете использовать что-то другое, чем Cookie для хранившего/получения опций в будущем, необходимо будет только изменить функции.
Ни один не действительно более корректен, хотя я избежал бы второго, поскольку глубоко вложенные условные выражения имеют тенденцию быть твердыми понять и поддержать.
Если Вы предпочли бы, чтобы Вы получили исключение нулевого указателя, использовали первое. Если Вы хотите иметь дело с пустыми указателями в другом отношении или тихо, используйте второе (или пересмотренная версия второго).
Если Вы думаете, что существует шанс это Current
, Response
, Cookies
, или Cookies[authCookieName]
мог быть null
, и у Вас есть разумная вещь сделать, если какой-либо из них, то последний способ пойти. Если возможности являются низкими, и/или нет ничего, что можно сделать, если промежуточные звенья являются пустыми, пойдите для первого, поскольку это более кратко - лучшее, которое Вы могли сделать, должен получить лучший вход, если Вы используете расширенный пример.