2013-06-17 3 views
0

Actuellement j'utilise un plugin jQuery Calendar pour afficher un calendrier que j'ai construit. Toutes les données sont complétées à partir d'une base de données SQL en utilisant PHP. Je suis au point avec le calendrier où je dois commencer à avancer et reculer dans le temps. J'ai beaucoup de mal à faire ça pendant une semaine et un mois. Pour juste la vue du jour ce n'était pas mauvais.Calcul du début et de la fin du changement de semaine et de mois?

Ceci est mon code pour le jour

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

Je passe ensuite $startTime dans une autre fonction qui fait une requête SQL. $_SESSION[ 'number'] est mis à 0 s'il n'a pas été défini auparavant, sinon j'ajoute 1 ou soustraire 1 en fonction de si l'utilisateur touche le suivant ou le précédent. endTime() est presque la même fonction.

Je voudrais seulement avoir à apporter des modifications à mes fonctions et endTime() si possible.

Heres les désordre, et non testés (Nos serveurs vers le bas atm) code pour le calcul jour/semaine/mois

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; 
} 

Je voudrais remercier tout le monde pour leur temps, ceci est mon premier message alors s'il vous plaît laissez Je sais s'il y a de mauvaises pratiques dans mon poste. J'ai cherché stackoverflow, et google pour une solution à ce problème et n'ai pas tout à fait trouvé un.

+0

Êtes-vous obtenir une erreur ou cherchez-vous une révision de code? – Pitchinnate

+0

Revue de code, j'aurais dû l'indiquer. Comme je l'ai dit notre serveur est en panne mais je suis presque positif de calcul pour le mois ne fonctionnera pas. Pour fixer le mois j'ai trouvé cela, mais je ne sais pas si strtotime fonctionne de cette façon '$ day = strtotime (" + ". $ _ SESSION ['nombre']." Mois - 1 heure "); '$ today = getdate ($ day);' '$ endTime = mktime (8, 0, 0, $ aujourd'hui [" mon "] + ($ _ SESSION ['nombre']), $ aujourd'hui [" mday " ], $ aujourd'hui ['year']); ' – Auro

Répondre

0

Pour référence future pour la révision de code, utilisez https://codereview.stackexchange.com/ si vous rencontrez des problèmes pour que le code fonctionne, postez-le à http://stackoverlow.com. J'utiliser strtotime au lieu de mktime et en faire une fonction qui retourne à la fois début et la fin du temps:

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); 
} 

Je suppose que si vous avez besoin de deux vous pouvez simplement les ajouter comme des fonctions différentes ceci:

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

Merci de ne pas refaire la même erreur – Auro

Questions connexes