2013-06-17 3 views
0

В настоящее время я использую плагин Calendar jQuery для отображения созданного вами Календаря. Все данные заполняются из базы данных SQL с использованием PHP. Я нахожусь в точке с календарем, где мне нужно начинать идти вперед и назад во времени. У меня много неприятностей, делающих это в течение недели и месяца. Для дневного просмотра это было неплохо.Расчет начала и окончания недели и месяца?

Это мой код для дня

function startTime() { 
    $today = getdate(); 
    $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]);} 

Я тогда передать $startTime в другую функцию, которая делает запрос SQL. $_SESSION[ 'number'] установлено в 0, если оно не было установлено ранее, в противном случае я добавляю 1 или вычитаю 1 в зависимости от того, достигнут ли пользователь следующий или предыдущий. endTime() - почти такая же функция.

Хотелось бы только внести изменения в мои функции startTime() и endTime(), если это возможно.

Heres грязный и непроверенные (Наши серверы вниз атм) код для расчета день/неделя/месяц

function startTime($type) 
{ 
    $today = getDate(); 
    $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]); 

    if ($type == "day") 
    { 
     $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]); 
    } 

    if ($type == "week") 
    { 
     if ($today['w'] == 0) 
     { 
      $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']); 
     } 
     else 
     { 
      $day = strtotime("last Sunday"); 
      $today = getdate($day); 
      $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']); 
     } 
    } 

    if ($type == "month") 
    { 
     $startTime = mktime(8, 0, 0, $today["mon"]+($_SESSION['number']), 0, $today['year']); 
    } 

    return $startTime; 
} 

function endTime(type) 
{ 
    $today = getdate(); 
    $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]); 

    if ($type == "day") 
    { 
     $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]); 
    } 

    if ($type == "week") 
    { 
     if ($today['w'] == 6) 
     { 
      $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']); 
     } 
     else 
     { 
      $day = strtotime("next Saturday"); 
      $today = getdate($day); 
      $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']); 
     } 
    } 

    if ($type == "month") 
    { 
     $day = strtotime("next month - 1 hour"); 
     $today = getdate($day); 
     $endTime = mktime(8, 0, 0, $today["mon"]+($_SESSION['number']), $today["mday"], $today['year']); 
    } 

    return $endTime; 
} 

Я хотел бы поблагодарить всех за время, это мой первый пост так, пожалуйста, сообщите я знаю, есть ли какие-то плохие практики в моем посте. Я искал stackoverflow и google для решения этой проблемы и не нашел ее.

+0

Вы получение ошибки или вы ищете обзор кода? – Pitchinnate

+0

Обзор кода, я должен был сказать. Как я уже сказал, наш сервер отключен, но я почти уверен, что расчет за месяц не сработает. Чтобы исправить месяц, я придумал это, но я не знаю, работает ли strtotime таким образом. '$ day = strtotime (" + ". $ _ SESSION ['number']." Month - 1 hour "); ' ' $ today = getdate ($ day); ' ' $ endTime = mktime (8, 0, 0, $ today ["mon"] + ($ _ SESSION ['number']), $ today ["mday" ], $ today ['year']); ' – Auro

ответ

0

Для справки в будущем используйте код https://codereview.stackexchange.com/, если у вас возникли проблемы с получением кода для работы. Отправьте его по адресу http://stackoverlow.com. Я хотел бы использовать strtotime вместо mktime и сделать одну функцию, которая возвращает как начальное и конечное время:

function getTimes($type) { 
    $end_number = $_SESSION['number'] + 1; 
    $extra = '-1 day'; 
    if ($type == "day") { 
     $end_number = $_SESSION['number']; 
     $extra = ''; 
     $date_start = date('Y-m-d'); 
    } elseif ($type == 'week') { 
     $date_start = date('Y-m-d',strtotime('now -'.date('w').' days')); 
    } elseif ($type == 'month') { 
     $date_start = date('Y-m-01'); 
    } 
    $operator = '+'; 
    if($_SESSION['number'] < 0) $operator = ''; 
    $startTime = strtotime("$date_start 08:00:00 {$operator}{$_SESSION['number']} {$type}s"); 
    $endTime = strtotime("$date_start 20:00:00 {$operator}{$end_number} {$type}s $extra"); 

    return array('startTime'=>$startTime,'endTime'=>$endTime); 
} 

Я думаю, если вам нужны две различные функции, которые вы могли бы просто добавить их следующим образом:

function startTime($type) { 
    $times = getTimes($type); 
    return $times['startTime']; 
} 
function endTime($type) { 
    $times = getTimes($type); 
    return $times['endTime']; 
} 
+0

Спасибо, я не повторю ту же ошибку – Auro

Смежные вопросы