2012-10-12 3 views
2

J'essaie d'accomplir la tâche suivante. Je suis en train de développer un calendrier personnalisé avec trois vues (jour, semaine et mois), il y a peut-être déjà quelque chose mais je réécris cela comme un outil d'apprentissage pour moi aussi.déterminer la semaine quand choisir un jour

Ainsi, l'utilisateur sera confronté à la vue du jour lors de sa première visite, avec des flèches pour aller et venir au jour suivant ou à la veille du cours. Si elles cliquent sur la vue de la semaine, il leur donnera un aperçu de 7 jours avec la date d'aujourd'hui par défaut, et encore une fois, ils peuvent aller et venir à la semaine prochaine ou la semaine précédente. La dernière vue est le calendrier du mois complet, une fois qu'ils cliquent sur le jour, il leur donnera le détail du jour et en même temps réinitialiser le défaut comme le jour qu'ils choisissent. Donc, s'ils reviennent à la vue hebdomadaire, ils verront le détail de la semaine contenir le jour qu'ils ont choisi. C'est là que j'ai du mal à comprendre, je sais qu'il y a des fonctions PHP qui déterminent le jour de la semaine mais je n'arrive pas à penser comment passer la date et obtenir la semaine complète à partir du dimanche Par exemple, si je suis passé le 10/12/2012, je voudrais commencer la semaine du 10/07/12 au 13/10/12.

Nous vous remercions de votre aide ou de vous orienter dans la bonne direction. Veuillez excuser mes fautes de grammaire et d'orthographe.

+1

'date ('N')' vous donne le jour de la semaine, par ex. mardi = 2. un dimanche-samedi couvrant ce jour serait curdate-2 -> curdate + 4 –

+0

merci Marc, c'est ce dont j'ai besoin. – derikluv

+0

Vous devriez vraiment envisager de le faire dans un cadre javascript comme jQuery avec des appels ajax au serveur, ou un paquet php comme offres de poire. Cela rendra votre vie beaucoup plus facile, et croyez-moi, vous apprendrez encore beaucoup. –

Répondre

2
  1. En supposant que $selection représente comme un horodatage entier de l'utilisateur la date sélectionnée, date('N', $selection) renverra une représentation numérique du jour de la semaine de leur sélection (par exemple lundi = 1 à dimanche = 7).

    Ce résultat représente également le nombre de jours depuis le début de la semaine sélectionnée (le dimanche précédent) - $offset. Bien sûr, si vous commencez avec une représentation sous forme de chaîne des utilisateurs sélectionnés date (comme dans votre question, 10/12/2012), vous devez d'abord convertir la date en un horodateur entier.

    $selection = strtotime($selection); //if $selection is in string format 
    $offset = date('N', $selection); 
    


  2. Maintenant, vous pouvez utiliser $offset pour établir la date du début de la semaine (le dimanche précédent) - $weekstart.

    $weekstart = strtotime("$selection -$offset day"); 
    


  3. Une fois que vous avez le début de la semaine, la fin de la semaine ($weekend) est, bien sûr, 6 jours plus tard, mais pour calculer cette date , vous d'abord besoin de convertir $weekstart à partir d'un nombre entier timestamp dans une représentation sous forme de chaîne de la date.Vous devrez également convertir le résultat ($weekend) en une représentation sous forme de chaîne de la date.

    $weekstart = stringftime("%m/%d/%Y", $weekstart); //date format = 10/07/2012 
    $weekend = strtotime("$weekstart +6 day"); 
    $weekend = stringftime("%m/%d/%Y", $weekend); 
    



Ainsi, les suivantes:

$selection = "10/12/2012"; 
$selection = strtotime($selection); 
$offset = date('N', $selection); 
$weekstart = strtotime("$selection -$offset day"); 
$weekstart = stringftime("%m/%d/%Y", $weekstart); 
$weekend = strtotime("$weekstart +6 day"); 
$weekend = stringftime("%m/%d/%Y", $weekend); 

$output = "Selected Date = $selection \n Selected Week = $weekstart - $weekend"; 

echo $output; 

résultats dans:

Selected Date = 10/12/2012 
Selected Week = 10/07/2012 - 10/13/2020 



Voir:

http://php.net/manual/en/function.date.php
http://php.net/manual/en/function.strtotime.php
http://php.net/manual/en/function.strftime.php

0

utilisation strtotime() fonction associée à la fonction date() pour cette tâche

pour par exemple. 1 jour avant le 2012-10-09 est

echo date('Y-m-d', strtotime("2012-10-09 -1 day")); 
0

Sur la base de la réponse de Sagesse, vous pouvez trouver le 1er jour de la semaine en quelques étapes. Consultez la PHP date() manual pour plus d'options, mais je crois que le code suivant fonctionnera:

// figure out how many days back you have to go, to get to Sunday 
$d = date('N', strtotime($mydate)); 
// figure out Sunday's date 
$beginning_of_week = date('Y-m-d', strtotime($mydate." -{$d} days")); 
$end_of_week = date('Y-m-d', strtotime($beginning_of_week." +1 week")); 
echo "The week {$beginning_of_week} to {$end_of_week}! "; 
+0

Merci Topher, j'ai tendance à trop compliquer mon processus de réflexion lorsque la solution est très claire exactement comme vous l'avez expliqué. – derikluv

0

Essayez cette fonction (source: Marty Wallace).

La date qui vous intéresse est $date (au format AAAA-MM-JJ) et $rollover en format journée entière (par exemple le vendredi).

function getWeeks($date, $rollover) 

{ 
    $cut = substr($date, 0, 8); 
    $daylen = 86400; 

    $timestamp = strtotime($date); 
    $first = strtotime($cut . "00"); 
    $elapsed = ($timestamp - $first)/$daylen; 

    $i = 1; 
    $weeks = 1; 

    for($i; $i<=$elapsed; $i++) 
    { 
     $dayfind = $cut . (strlen($i) < 2 ? '0' . $i : $i); 
     $daytimestamp = strtotime($dayfind); 

     $day = strtolower(date("l", $daytimestamp)); 

     if($day == strtolower($rollover)) $weeks ++; 
    } 

    return $weeks; 
} 
Questions connexes