<?php
function build_calendar($month,$year,$dateArray) {
// Create array containing abbreviations of days of week.
$daysOfWeek = array('S','M','T','W','T','F','S');
// What is the first day of the month in question?
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
// How many days does this month contain?
$numberDays = date('t',$firstDayOfMonth);
// Retrieve some information about the first day of the
// month in question.
$dateComponents = getdate($firstDayOfMonth);
// What is the name of the month in question?
$monthName = $dateComponents['month'];
// What is the index value (0-6) of the first day of the
// month in question.
$dayOfWeek = $dateComponents['wday'];
// Create the table tag opener and day headers
$calendar = "<table class='calendar'>";
$calendar .= "<caption>$monthName $year</caption>";
$calendar .= "<tr>";
// Create the calendar headers
foreach($daysOfWeek as $day) {
$calendar .= "<th class='header'>$day</th>";
}
// Create the rest of the calendar
// Initiate the day counter, starting with the 1st.
$currentDay = 1;
$calendar .= "</tr><tr>";
// The variable $dayOfWeek is used to
// ensure that the calendar
// display consists of exactly 7 columns.
if ($dayOfWeek > 0) {
$calendar .= "<td colspan='$dayOfWeek'> </td>";
}
$month = str_pad($month, 2, "0", STR_PAD_LEFT);
while ($currentDay <= $numberDays) {
// Seventh column (Saturday) reached. Start a new row.
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "</tr><tr>";
}
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
$date = "$year-$month-$currentDayRel";
$calendar .= "<td class='day' rel='$date'>$currentDay</td>";
// Increment counters
$currentDay++;
$dayOfWeek++;
}
// Complete the row of the last week in month, if necessary
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= "<td colspan='$remainingDays'> </td>";
}
$calendar .= "</tr>";
$calendar .= "</table>";
return $calendar;
}
?>
Verwendung
Erstelle einen Kalender für den aktuellen Monat
<?php
$dateComponents = getdate();
$month = $dateComponents['mon'];
$year = $dateComponents['year'];
echo build_calendar($month,$year,$dateArray);
?>
Wie könnte ich das ändern, um den aktuellen Tag hervorzuheben?
Fügen Sie diese beiden Variablen am Anfang des Skripts hinzu
Ändern Sie dann die Datums-Schleife zu Folgendem
Verwenden Sie id='today_date' in Ihrem CSS, um das Aussehen der Tage zu ändern...
Ich hoffe, das hilft...
– Jason
Diese Funktionen können ebenfalls verwendet werden. Die erste erstellt einen Kalender für einen bestimmten Monat/Jahr, und die zweite erstellt einen Jahreskalender für das angegebene Monat/Jahr.
//Für einen bestimmten Monat und ein bestimmtes Jahr$month = "3"; //Nummer des Monats (1-12)
$year = "2010"; //Vier Ziffern
echo build_calendar($month,$year,$dateArray);
//Für alle Monate eines bestimmten Jahres$year = "2010";
$i = 1;
$month=1; //Numerischer Wert
while($i <'s= 12){
echo build_calendar($month,$year,$dateArray);
$month=$month+1;
$i++;}
Der zweite Code sollte eigentlich lauten:
//Für alle Monate eines bestimmten Jahres$year = "2010";
$i = 1;
$month=1; //Numerischer Wert
while($i <'s= 12){
echo build_calendar($month,$year,$dateArray);
$month=$month+1;
$i++;}
Das ist ziemlich nett. Danke.
Ich kann es immer noch nicht schaffen, dass das komplette Jahr funktioniert.
Irgendwelche Ideen?
while($i <= 12){
anstelle von while($i <'s= 12){
Könnten Sie bitte erklären, wie man Ereignisse (lokale Datenbank) im Kalender anzeigt und Kalendersteuerelemente wie die Auswahl des Monats, Jahres und der Vor-/Nächstmonats-Navigation hat. Danke.
Zachary ([email protected])
Fragen Sie einfach Ihre Datenbank nach dem Datum des Ereignisses ab... zerlegen Sie den String so, dass Sie nur den Tag in einstelliger Formatierung erhalten. Dann überprüfen Sie in der Datumsdruckschleife (siehe mein obiger Code), ob das abgefragte Datum mit dem $currentDay übereinstimmt. Wenn ja, drucken Sie die Daten des Ereignisses aus. Es wird jedes Mal mit dem neuen Datum erneut abgefragt.
Beispiel
Fügen Sie den Code while ($currentDay <= $numberDays) { } Schleife ein...
Überprüfen Sie meine Anfrage-Schleife noch einmal, aber das sollte funktionieren...
Es ist wirklich ein gutes Skript und eine gute Idee zur Implementierung. Gut gemacht! Entwickler können es nach ihren Bedürfnissen verwenden/anpassen. ;)
Fragen: Was ist das dritte Argument $dateArray? Mir scheint, es gibt keine Referenz in der Funktion für dieses Argument.
Tolles Werkzeug. Ich wünschte, es gäbe eine Möglichkeit, den Monat zu wechseln, aber das würde AJAX oder die Verwendung eines iFrames erfordern.
Ändern
In etwas wie dies (zeigt die Datumsangaben neben dem Datum an)
Oder dies (verlinkt zu einer Seite für bestimmte Daten)
und das Array woanders aufbauen. Siehe die Seite, die ich meinem Namen verlinkt habe, für die Ausgabe (ich muss noch etwas Formatierung bereinigen).
Ebenso... WAS ist das 3. Argument $dateArray? Ich erhalte als Ergebnis undefinierte Variablenfehler. Habe beide Referenzen darauf aus dem Code entfernt und der Kalender erscheint ohne Fehler.
Hallo
Ich lerne gerade, wie man einen Kalender auf einem Webblog einfügt, und bin auf diesen Thread gestoßen. Könnten Sie mir bitte sagen, wie das vollständige Skript usw. für den Kalender lautet?
Vielen Dank im Voraus
Irene
Meine kleine Änderung, damit die Woche am Montag beginnt
Ändern Sie auch einfach das Array $daysOfWeek.
Ich hoffe, es funktioniert :)
Brillant! Genau das, was ich gesucht habe :D
Kurzversion
$dayOfWeek = ($dateComponents[‘wday’] + 6) % 7;
Großartig, gefällt mir sehr.
Vielen Dank für ein großartiges Code-Stück und an die Leute, die Feedback mit optionalen Änderungen hinterlassen haben, die die Funktionalität des Kalenders wirklich verbessern
Hallo, ich bin ein Schüler der Oberstufe (Anfänger), ich habe dies in FuelPHP implementiert, aber es gibt einige Fehler,
<?phpclass Controller_Calendar extends Controller_Timetable{
public function before(){
parent::before();
}
public function build_calendar($month,$year) {
// Erstellen Sie ein Array mit Abkürzungen der Wochentage.
$daysOfWeek = array('S','M','T','W','T','F','S');
// Was ist der erste Tag des betreffenden Monats?
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
// Wie viele Tage hat dieser Monat?
$numberDays = date('t',$firstDayOfMonth);
// Rufen Sie einige Informationen über den ersten Tag des
// betreffenden Monats ab.
$dateComponents = getdate($firstDayOfMonth);
// Wie heißt der betreffende Monat?
$monthName = $dateComponents['month'];
// Was ist der Indexwert (0-6) des ersten Tages des
// betreffenden Monats ab.
$dayOfWeek = $dateComponents['wday'];
// Erstellen Sie den Tabellen-Tag-Opener und die Tagesüberschriften
$calendar = "";
$calendar .= "$monthName $year";
$calendar .= "";
// Erstellen Sie die Kalenderüberschriften
foreach($daysOfWeek as $day) {
$calendar .= "$day";
}
// Erstellen Sie den Rest des Kalenders
// Initialisieren Sie den Tageszähler, beginnend mit dem 1.
$currentDay = 1;
$calendar .= "";
// Die Variable $dayOfWeek wird verwendet, um
// sicherzustellen, dass der Kalender
// genau 7 Spalten enthält.
if ($dayOfWeek > 0) {
$calendar .= " ";
}
$month = str_pad($month, 2, "0", STR_PAD_LEFT);
while ($currentDay <= $numberDays) {
// Siebte Spalte (Samstag) erreicht. Beginnen Sie eine neue Zeile.
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "";
}
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
$date = "$year-$month-$currentDayRel";
$calendar .= "$currentDay";
// Zähler erhöhen
$currentDay++;
$dayOfWeek++;
}
// Vervollständigen Sie die Zeile der letzten Woche im Monat, falls erforderlich
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= " ";
}
$calendar .= "";
$calendar .= "";
return $calendar;
}$dateComponents = getdate();
$i = 1;
$month=1; //Numerischer Wert
while($i
ErrorException [ Parsing Error ]: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in $dateComponents = getdate();
Können Sie alle dieses Problem für mich erklären?
Sehr gutes Skript. Prägnant und kurz. Danke
Meine kleinen Änderungen zur Hervorhebung bestimmter Daten
Vor dem Aufruf der Hauptfunktion:
$dateArray = array('FEB04','MAR20');Innerhalb der Hauptfunktion:
$monthNameShort = strtoupper(substr($monthName,0,3));Innerhalb der
while ($currentDay <= $numberDays)'SchleifeVielen Dank.
Wie kann ich einen Kalender erstellen, der einige Daten vom Vormonat und Folgemonat enthält? Zum Beispiel: http://st.rfclipart.com/image/big/c4-e1-9f/february-2013-calendar-month-Download-Royalty-free-Vector-File-EPS-13946.jpg
Vielen Dank im Voraus!
Hochschieben. Ich würde das auch gerne wissen.
:0)
Perch
Ich weiß nicht, ob Sie interessiert sein werden, aber ich habe ein paar Codezeilen hinzugefügt, um monatsweise durch den Kalender zu blättern. Ich hatte Probleme mit $dateComponents. Ich habe keine Ahnung, wie man damit arbeitet, also habe ich es entfernt und (für mich einfacher) DATE und MKTIME verwendet.
Wenn Sie es verwenden, fügen Sie es unten in den Code ein
Dies füllt die leeren Felder mit Tagen des Vormonats oder Folgemonats. So etwas wie Google Kalender und so
Hallo! Tolles Skript. Nur eine kleine Frage, wenn es möglich ist.
Wie kann ich $monthName zu einem Array machen. So etwas wie
$monthName = array(‘Januar’,’Februar’,’März’,’April’,’Mai’,’Juni’,’Juli’,’August’,’September’,’Oktober’,’November’,’Dezember’);
Danke im Voraus!
Hallo. Ich suche nach ähnlichem Rat. Ich muss die Monatsnamen in meiner Sprache machen, und das würde mir wirklich helfen.
$monate = array(
1=>”Januar”,
2=>”Februar”,
3=>”März”,
4=>”April”,
5=>”Mai”,
6=>”Juni”,
7=>”Juli”,
8=>”August”,
9=>”September”,
10=>”Oktober”,
11=>”November”,
12=>”Dezember”
);
Viel Spaß ;-)
Hallo, ich habe ein Problem und kann es nicht lösen. Weiß jemand, wie?
Notice: Undefined variable: today_date in D:\Server\htdocs\Ejercicios\Pruebas\Prueba2.php on line 94
Großartiges Skript, danke. Aber ich versuche, einen benutzerdefinierten Kalender anstelle des Gregorianischen Kalenders zu erstellen.
Ich muss einen Kalender aus einem Array erstellen, wie diesem.
date73 = {2073,32,32,31,32,31,30,30,30,29,29,30,31}
date74 = {2074,31,31,31,32,31,31,30,29,30,29,30,30}
wobei die erste date73[0] das Jahr und die restlichen die Tage in den Monaten sind. Bitte helfen Sie.
Hallo, das ist großartig, danke!
Wie wäre es möglich, den Monat als Parameter zu haben, um den Kalendermonat zu ändern?
Vielleicht über die URL senden?
Vielen Dank
Hallo, kann mir jemand eine Spalte für die Wochen zum Kalender hinzufügen?
BUMP! Ich würde das auch gerne wissen =]
Was macht $dateArray?!
Gibt es eine Möglichkeit, es so zu machen, dass das aktuelle Datum immer in der zweiten Woche liegt? Also die letzte Woche oben, dann die aktuelle Woche, dann die nächsten 2?
Sie müssten Daten abrufen, die früher als der aktuelle Monat beginnen. Ich habe mit diesem Snippet noch nicht herumgespielt, aber vielleicht ist das Einstellen von
$currentDayauf eine negative Zahl für die Anzahl der Tage, die Sie zurückgehen möchten, der erste Schritt.Schön :) Gibt es eine Möglichkeit, das ganze Jahr anzuzeigen, aber mit 1 bis 31 oben und dann die Monate seitlich? Ich versuche, eine Anwesenheitskarte zu erstellen, bei der ein Punkt in den Tagen gesetzt wird, an denen der Student anwesend ist.
Ich hoffe, das macht Sinn :)
Danke. Aber was muss ich ändern, wenn die Woche am Montag beginnt?
Ändern Sie einfach das Array der Wochentage in die richtige Reihenfolge.
Und ändern Sie
$dayOfWeek = $dateComponents[‘wday’];
zu
$dayOfWeek = ($dateComponents[‘wday’] + 6) % 7;
Es scheint mir ein ausgezeichneter Code,
Ich habe es geschafft, jedem Tag eine URL hinzuzufügen, indem ich den folgenden Code hinzugefügt habe... Beim Klicken auf jeden Tag wird eine Seite angezeigt.
$calendar .= “<a href=’http://url.com.php?date=$date>$currentDay“;
Haben Sie eine Idee, wie ich die URL in einem iFrame auf derselben Seite anzeigen kann?