Umgang mit Daten und Zeiten in jeder Programmiersprache ist oft eine einfache und triviale Aufgabe, bis die Zeitzone unterstützt werden muss. Glücklicherweise verfügt PHP über eine Reihe leistungsstarker Datums-/Uhrzeit-Tools, mit denen Sie mit verschiedenen zeitlichen Problemen umgehen k?nnen: UNIX-Zeitstempel, Formatdaten für menschliches Lesen, Anzeigendaten mit Zeitzonen, berechnen Sie den Zeitunterschied zwischen jetzt und dem zweiten Dienstag des n?chsten Monats und mehr. In diesem Artikel werden die Zeitfunktionen von PHP (time()
, mktime()
und date()
) und ihre objektorientierten Gegenstücke vorgestellt und dann etwas über MySQL-Daten erfahren und Ihnen zeigen, wie sie mit PHP perfekt zusammenarbeiten k?nnen.
Hauptgewinne
- Effizient mit UNIX -Zeitstempeln und formatierten Daten mit leistungsstarken Datums- und Zeitfunktionen von PHP wie
time()
,mktime()
unddate()
handhaben. - verwenden Sie die Objekte von PHP
DateTime
undDateTimeZone
für objektorientierte Datums- und Uhrzeitoperationen, einschlie?lich der Behandlung verschiedener Zeitzonen. - Speichern Sie Daten in MySQL als UNIX -Zeitstempel, um die Konsistenz zwischen verschiedenen Zeitzonen und der Konvertierung und Formatierung mithilfe der Datums-/Zeitfunktion von PHP aufrechtzuerhalten.
- Stellen Sie die Standardzeitzone des Servers in UTC in der PHP -Konfiguration fest, um Datum und Zeitverwaltung zu vereinfachen und die Anwendungskonsistenz sicherzustellen.
Php Datum und Zeitfunktion
Der gr??te Teil dieses Artikels verwendet die Unix -Zeit, auch als POSIX -Zeit oder Epochenzeit bezeichnet. Die Zeit wird ausgedrückt, wenn die Anzahl der Sekunden seit Mitternacht UTC am 1. Januar 1970 abgelaufen ist. Wenn Sie an der gesamten Geschichte der Unix -Zeit interessiert sind, lesen Sie den Artikel von Unix Time über Wikipedia. UTC (koordinierte universelle Zeit), auch als GMT bekannt, ist die Zeit der 0-Grad-L?ngengradlinie. Alle anderen Zeitzonen der Welt werden als positive oder negative Offsets in Bezug auf diese Zeit dargestellt. Durch die Verwendung von UTC und Unix Time to zu verarbeiten, erleichtert Ihr Leben, wenn Sie Zeitzonen verarbeiten müssen. Ich werde sp?ter ausführlich darauf eingehen, aber vorerst ignorieren wir das Zeitzonenproblem und sehen uns einige Zeitfunktionen an.
Holen Sie sich die aktuelle Unix -Zeit
time()
akzeptiert keine Parameter und gibt die Anzahl der Sekunden seit der UNIX -Epoche zurück. Um dies zu veranschaulichen, werde ich die Php Interactive CLI Shell verwenden.
sean@beerhaus:~$ php -a php > print time(); 1324402770
Wenn Sie eine Array -Darstellung der Unix -Zeit ben?tigen, verwenden Sie die Funktion getdate()
. Es akzeptiert einen optionalen UNIX -Zeitstempelparameter, jedoch standardm??ig einen Wert von time()
, wenn nicht angegeben.
php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )
Format Unix Time
Unix -Zeit kann leicht zu jeder Zeichenfolge formatiert werden, die Menschen lesen m?chten. date()
wird verwendet, um Unix-Zeitstempel in menschlich-lesbare Zeichenfolgen zu formatieren und einen Formatparameter und einen optionalen Zeitparameter zu akzeptieren. Wenn kein optionaler Zeitstempel bereitgestellt wird, wird der Wert von time()
verwendet.
sean@beerhaus:~$ php -a php > print time(); 1324402770
"R" Format String gibt die von RFC 2822 angegebene Formatierungszeit zurück. Natürlich k?nnen Sie andere Spezifizierer verwenden, um Ihr eigenes benutzerdefiniertes Format zu definieren.
php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )
Siehe die Seite von date()
in der PHP -Dokumentation für eine vollst?ndige Liste akzeptabler formatierter Zeichen. In Verbindung mit den Funktionen mktime()
und strtotime()
wird die Funktion jedoch nützlicher, wie Sie in den folgenden Beispielen sehen werden.
Erstellen Sie die Unix -Zeit basierend auf einer bestimmten Zeit
mktime()
wird verwendet, um Unix -Zeitstempel basierend auf einer Liste von Werten (Sekunden, Minuten, Stunden, Jahre usw.) zu erstellen, die jedem Teil des Datums entsprechen. Es akzeptiert viele Ganzzahlparameter und setzt jeden Teil des Datums in der folgenden Reihenfolge fest:
php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500
Set isDST
auf 1, wenn die Sparenzeit für Tageslicht auf 0 eingestellt ist.
php > print date("m/d/y h:i:s a", $unixTime); 12/20/11 12:54:48 pm php > print date("m/d/y h:i:s a"); 12/20/11 01:12:11 pm php > print date("jS of F Y", $unixTime); 20th of December 2011
Sie k?nnen sehen, dass mktime()
bei der Bearbeitung von Datenbankabfragen mit den benutzerdefinierten Datumsbereichen sehr nützlich ist. Wenn Sie beispielsweise Zeitstempel als Ganzzahlen (UNIX-Zeit) in MySQL (Vorhaben jemanden?) Speichern, ist es einfach, ein gemeinsames Abfragebereich von Jahr zu Jahr festzulegen.
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
Englischdaten auf Unix -Zeit aufl?sen
Fast magische Funktion strtotime()
nimmt eine Zeichenfolge im Datum/Zeitformat als erstes Argument und einen Unix -Zeitstempel, der als Basis für die Konvertierung verwendet wird. Weitere Informationen zu akzeptablen Datumsformaten finden Sie in der Dokumentation.
php > print date("r", mktime(12, 0, 0, 1, 20, 1987)); Tue, 20 Jan 1987 12:00:00 -0500 php > print date("r", mktime(0, 0, 0, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 00:00:00 -0500 php > print date("r", mktime(23, 59, 59, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 23:59:59 -0500
Phps DateTime- und DateTimeZone -Objekte
Phps DateTime
Objekt ist eine objektorientierte Methode, die Daten und Zeitzonen behandelt. Der Konstruktor akzeptiert eine String -Darstellung der Zeit, die dem oben genannten strtotime()
sehr ?hnlich ist, das einige Menschen m?glicherweise einfacher zu bedienen finden. Wenn keine Parameter bereitgestellt werden, lautet der Standardwert "jetzt".
<?php $startTime = mktime(0, 0, 0, 1, 1, date("y")); $endTime ?= mktime(0, 0, 0, date("m"), date("d"), date("y"));Die
DateTime
-Methode von format()
funktioniert genauso wie die oben date()
-Funktion und akzeptiert alle die gleichen formatierten Zeichen. Das DateTime
-Objekt wird auch mit einigen nützlichen Konstanten ausgestattet, die der Methode format()
zugeführt werden k?nnen.
php > print strtotime("now"); 1324407707 php > print date("r", strtotime("now")); Tue, 20 Dec 2011 14:01:51 -0500 php > print strtotime("+1 week"); 1325012569 php > print date("r", strtotime("+1 week")); Tue, 27 Dec 2011 14:03:03 -0500 php > print date("r", strtotime("next month")); Fri, 20 Jan 2012 14:04:20 -0500 php > print date("r", strtotime("next month", mktime(0, 0, 0))); Fri, 20 Jan 2012 00:00:00 -0500 php > print date("r", strtotime("next month", mktime(0, 0, 0, 1, 31))); Thu, 03 Mar 2011 00:00:00 -0500
Die vollst?ndige Liste der Konstanten finden Sie auf der Dokumentseite DateTime
. Da wir uns bald mit der Zeitzone auseinandersetzen werden, geben wir eine Standardzeitzone für PHP an. Suchen Sie in Ihrer Php.ini -Konfigurationsdatei (ich habe eine für CLI und eine für Apache) den Abschnitt wie unten gezeigt:
php > $dt = new DateTime("now"); php > print $dt->format("r"); Tue, 20 Dec 2011 16:28:32 -0500 php > $dt = new DateTime("December 31 1999 12:12:12 EST"); php > print $dt->format("r"); Fri, 31 Dec 1999 12:12:12 -0500
Wenn date.timezone
kein Wert zugeordnet wird, wird PHP sein Bestes geben, um die auf dem Server festgelegte Systemzeitzone zu bestimmen. Sie k?nnen date_default_timezone_get()
verwenden, um zu überprüfen, welcher Wert PHP verwendet.
sean@beerhaus:~$ php -a php > print time(); 1324402770
setzen wir die Zeitzone des Servers auf die UTC -Zeit (date.timezone = UTC
) und speichern Sie die Konfigurationsdatei. Sie müssen Apache oder CLI -Shell neu starten, um die ?nderungen anzuzeigen. Das Php DateTime
-Objekt enth?lt eine interne DateTimeZone
-Klassinstanz, um die Zeitzone zu verfolgen. Wenn Sie eine neue Instanz von DateTime
erstellen, sollte der interne DateTimeZone
auf den in php.ini bereitgestellten Standardwert festgelegt werden.
php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )
Die vollst?ndige Liste der akzeptablen Zeitzonennamen finden Sie auf der Zeitzone -Dokumentseite. Sie k?nnen jetzt den Zeitunterschied sehen, wenn zwei DateTime
-Objekte unterschiedliche Zeitzonen erhalten. Zum Beispiel ist hier ein Beispiel für die Konvertierung von UTC in Amerika/new_york (EST).
php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500
Bitte beachten Sie den Offset -0500 im Dezember. Wenn Sie den Zeitwert auf ein Sommerdatum wie den 1. Juli ?ndern, werden Sie feststellen, dass es die Tageslichtsparenzeit (EDT) kennt.
php > print date("m/d/y h:i:s a", $unixTime); 12/20/11 12:54:48 pm php > print date("m/d/y h:i:s a"); 12/20/11 01:12:11 pm php > print date("jS of F Y", $unixTime); 20th of December 2011
Verwenden Sie Daten mit MySQL und Php
Wenn Sie MySQL auf einer beliebigen Ebene verwendet haben, haben Sie m?glicherweise den DateTime -Typ festgestellt, der nicht in der Box funktioniert. Es sieht aus und riecht nach einem Date, und wenn Sie sagen, es ist ein Datum, haben Sie Recht. Sobald Sie es jedoch von MySQL in PHP ausgew?hlt haben, haben Sie nur eine Zeichenfolge, die wie ein Datum aussieht. Es hat kein Zeitzonenbewusstsein und ist für den menschlichen Gebrauch formatiert, bevor der Mensch es anzeigen muss. Ja, ich wei?, dass MySQL viele Date -Formatierungsfunktionen hat, aber wir verwenden bereits PHP, und wie Sie sehen k?nnen, ist PHP hervorragend in der Handhabungsdatumformate. Warum müssen wir es auch direkt aus der Datenbank formatieren? M?glicherweise müssen wir verschiedene Conversions und Formate anwenden. Es ist am besten, das Datum nur dann zu formatieren, wenn Menschen es sehen.
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
Führen Sie dieses einfache Skript aus und Sie k?nnen sehen, dass alles, was Sie aus dem Feld DateTime erhalten, eine formatierte Zeichenfolge ohne Zeitzoneninformationen ist.
php > print date("r", mktime(12, 0, 0, 1, 20, 1987)); Tue, 20 Jan 1987 12:00:00 -0500 php > print date("r", mktime(0, 0, 0, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 00:00:00 -0500 php > print date("r", mktime(23, 59, 59, date("n"), date("j"), date("Y"))); Tue, 20 Dec 2011 23:59:59 -0500
DateTime -Wert ist die lokale Zeit des Servers, die MySQL ausführen, unabh?ngig von der Zeitzone dieses Servers. Wenn Sie nur einen Server in eine Zeitzone einbeziehen, ist DateTime für die meisten Ihrer Bedürfnisse m?glicherweise geeignet, und ich bin sehr neidisch auf Sie. Wie benutze ich PHP und MySQL, um mit Daten und Zeitzonen umzugehen? Speichern Sie Daten als Unix -Zeitstempel. Sie wissen bereits, dass die Unix -Zeit die Anzahl der Sekunden seit der UTC am 1. Januar 1970 ist. Dadurch erhalten Sie eine konstante Zeitzone, und Sie haben m?glicherweise festgestellt, dass viele Datums-/Zeitfunktionen von PHP auf UNIX -Zeitstempeln basieren. Bei Verwendung von MySQL erstelle ich normalerweise eine Tabellenspalte, in der Daten als ganzzahlige nicht signierte Vorzeichen gespeichert sind. Wenn Sie ein Datum einfügen, k?nnen Sie PHPs time()
oder Mysql UNIX_TIMESTAMP()
verwenden.
<?php $startTime = mktime(0, 0, 0, 1, 1, date("y")); $endTime ?= mktime(0, 0, 0, date("m"), date("d"), date("y"));
Wenn Sie m?chten, dass MySQL Daten formatieren, k?nnen Sie dies tun. Die Zeit ist jedoch in der Zeitzone des Servers, die MySQL ausführen, und ich empfehle, dass Sie keine Formatierung durchführen, wenn Sie die Vorlage/Ansichtspegel Ihrer Webanwendung erreichen und bereit sind, sie zu sehen.
sean@beerhaus:~$ php -a php > print time(); 1324402770
In jeder Anwendung, die Zeitzonen umfasst, haben Sie normalerweise eine Tabelle, die die benutzerdefinierten Zeitzoneneinstellungen des Benutzers verfolgt und sie dann in den Wert $_SESSION
liest. Angenommen, Sie haben einen Sitzungseintrag, wie unten gezeigt:
php > $unixTime = time(); php > print_r(getdate($unixTime)); Array ( [seconds] => 48 [minutes] => 54 [hours] => 12 [mday] => 20 [wday] => 2 [mon] => 12 [year] => 2011 [yday] => 353 [weekday] => Tuesday [month] => December [0] => 1324403688 )
Sie k?nnen die gespeicherten Unix -Zeiten (in UTC) einfach in die Zeitzone eines bestimmten Benutzers um konvertieren.
php > print date("r", $unixTime); Tue, 20 Dec 2011 12:54:48 -0500
Dies führt zu dem Datum "Mon, 16. Januar 2012 12:03:49 -0600". -0600 sagt Ihnen, dass es 6 Stunden hinter UTC und der Offset von UTC 0 liegt. Wenn wir die Zeitzone auf Amerika/los_angeles festlegen, lautet das generierte Datum:
php > print date("m/d/y h:i:s a", $unixTime); 12/20/11 12:54:48 pm php > print date("m/d/y h:i:s a"); 12/20/11 01:12:11 pm php > print date("jS of F Y", $unixTime); 20th of December 2011
und America/new_york werden erzeugen:
<code>mktime(hour, minute, second, month, day, year, isDST)</code>
Zusammenfassung
Handhabungsdaten und Zeitzonen sind Teil des t?glichen Lebens vieler Programmierer, aber es besteht keine Notwendigkeit, sich Sorgen zu machen, wenn Sie die leistungsstarke und benutzerfreundliche Date-Bibliothek von PHP verwenden k?nnen. Sie haben gelernt, wie man Unix -Zeitstempel bekommt, wie man Termine in jedem erdenklichen Format formatiert, wie man die englische Darstellung von Daten in Zeitstempel analysiert, wie man Zeitstempel einh?lt und wie man zwischen Zeitzonen umwandelt. Wenn es in diesem Artikel zwei Hauptpunkte gibt, ist es 1) die Unix -Zeit und 2) bei der Verwendung von PHP und MySQL als Basiszeitzone als Basiszeitzone festhalten. Die Idee aller Zeiten, die auf UTC basieren, gilt nicht nur für PHP und MySQL. Wenn Sie in einer anderen Sprache arbeiten, besteht eine gute Chance, dass Sie sich selbst sagen werden: "Verdammt, warum k?nnen sie nicht das Gleiche wie PHP tun?"
Bilder von Yakobchuk Vasyl / Shutterstock
(Der FAQ -Abschnitt sollte hier zum FAQ -Abschnitt zum Umgang mit Daten und Zeiten in PHP hinzugefügt werden, ?hnlich dem FAQ -Abschnitt im Eingabetxt. Ich habe es hier aufgrund von Platzbeschr?nkungen nicht hinzugefügt.)
Das obige ist der detaillierte Inhalt vonArbeiten mit Daten und Zeiten in PHP und MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr
