De huidige datum en tijd in PHP formatteren

U zult vaak willen werken met datums en tijden bij het ontwikkelen van websites. U moet bijvoorbeeld de laatst gewijzigde datum in een bericht weergeven of vermelden hoelang geleden een lezer een opmerking heeft geschreven. Mogelijk moet u ook een aftelling van de dagen weergeven tot een speciale gebeurtenis.

Gelukkig komt PHP met een aantal ingebouwde datum- en tijdfuncties die ons helpen om dat alles en nog veel meer vrij gemakkelijk te doen.

In deze zelfstudie leer je hoe je de huidige datum en tijd in PHP kunt opmaken. U leert ook hoe u de tijdstempel van een datumstring kunt ophalen en hoe u verschillende datums kunt toevoegen en aftrekken.

De datum en tijd in stringindeling krijgen

datum ($ formaat, $ timestamp) is een van de meest gebruikte datum- en tijdfuncties die beschikbaar zijn in PHP. Het neemt het gewenste uitvoerformaat voor de datum als de eerste parameter en een geheel getal als een tijdstempelwaarde die moet worden geconverteerd naar het gegeven datumformaat. De tweede parameter is optioneel en als u deze weglaat, krijgt de uitvoer de huidige datum en tijd in tekenreeksindeling op basis van de waarde van $ formaat.

De $ formaat parameter accepteert een reeks tekens als geldige waarden. Sommige van deze personages hebben duidelijke betekenissen: Y geeft u de volledige numerieke weergave van het jaar met 4 cijfers (2018) en Y geeft u alleen de laatste twee cijfers van het huidige jaar (18). evenzo, H geeft je het uur in 24-uurs formaat met voorloopnullen, maar h geeft je het uur in 12-uur formaat met voorloopnullen. 

Hier zijn enkele van de meest voorkomende datumformaat-tekens en hun waarden.

Karakter Betekenis Voorbeeld
d dag van de maand met voorloopnullen 03 of 17
j dag van de maand zonder voorloopnullen 3 of 17
D dag van de week als afkorting van drie letters ma
l hele dag van de week maandag
m maand als een getal met voorloopnullen 09 of 12
n maand als een getal zonder voorloopnullen 9 of 12
M maand als een drieletterige afkorting september
F volledige maand september
Y tweecijferig jaar 18
Y Volledig jaar 2018

Er zijn veel andere speciale tekens om de uitvoer voor de te specificeren datum() functie. Het is het beste om de tabel op formaattekens te raadplegen in de datum() functiedocumentatie voor meer informatie over speciale gevallen.

Laten we enkele praktische voorbeelden van de datum() functie nu. We kunnen het gebruiken om het huidige jaar, de huidige maand, het huidige uur, etc. te krijgen, of we kunnen het gebruiken om een ​​volledige datumreeks te krijgen.

U kunt ook de datum() functie om de tijd uit te voeren. Hier zijn enkele van de meest gebruikte tekens voor tijdnotatie:

Karakter Betekenis Voorbeeld
g uren in 12-uur formaat zonder voorloopnullen 1 of 12
h uren in 12-uur formaat met voorloopnullen 01 of 12
G uren in 24-uurs formaat zonder voorloopnullen 1 of 13
H uren in 24-uurs formaat met voorloopnullen 01 of 13
een am / pm in kleine letters ben
EEN am / pm in hoofdletters AM
ik minuten met voorloopnullen 09 of 15
s seconden met voorloopnullen 05 of 30

En hier zijn enkele voorbeelden van het uitvoeren van geformatteerde tijdreeksen.

// Output - 11:03:37 AM echo datum ('h: i: s A'); // Output - Donderdag, 11:04:09 AM echodatum ('l, h: i: s A'); // Output - 13 september 2018, 11:05:00 AM echo datum ('d F Y, h: i: s A'); ?>

Het is ook belangrijk dat je aan deze speciale tekens ontsnapt als je ze in je datastring wilt gebruiken.

Download het Unix-tijdstempel

Soms moet je de waarde van het huidige Unix-tijdstempel in PHP krijgen. Dit is heel gemakkelijk met behulp van de tijd() functie. Het retourneert een geheel getal dat het aantal milliseconden beschrijft dat is verstreken sinds 1 januari 1970 om middernacht (00:00:00) GMT.

U kunt deze functie ook gebruiken om heen en weer te gaan in de tijd. Om dit te doen, hoeft u alleen maar het juiste aantal seconden af ​​te trekken van de huidige waarde van tijd() en verander dan de resulterende waarde in de gewenste datastring. Hier zijn twee voorbeelden:

Een belangrijk ding dat u moet onthouden is dat de tijdstempelwaarde is geretourneerd door tijd() is tijdzone agnostisch en krijgt het aantal seconden sinds 1 januari 1970 om 00:00:00 UTC. Dit betekent dat deze functie op een bepaald moment dezelfde waarde zal teruggeven in de VS, Europa, India of Japan.

Een andere manier om de tijdstempel voor een bepaalde datum te krijgen, is door de mktime ($ uur, $ minuut, $ seconde, $ maand, $ dag, $ jaar) functie. Wanneer alle parameters zijn weggelaten, gebruikt deze functie alleen de huidige lokale datum en tijd om de tijdstempelwaarde te berekenen. Deze functie kan ook worden gebruikt met datum() om nuttige datum- en tijdreeksen te genereren.

Eigenlijk, tijd() kan worden gebruikt om heen en weer te gaan naar een periode van tijd, terwijl mktime () is handig als u naar een bepaald punt in de tijd wilt gaan.

Converteer een Datetime String naar een tijdstempel

De strtotime ($ time, [$ now = time ()]) functie zal ongelooflijk handig zijn als u verschillende datum- en tijdwaarden in tekenreeksindeling wilt converteren naar een tijdstempel. De functie kan bijna alle datetime-reeksen in tijdstempels parseren.

Je moet zeker de geldige tijdnotaties, datumindelingen, samengestelde datetime-indelingen en relatieve datetime-indelingen controleren.

Met relatieve datetime-indelingen kan deze functie eenvoudig veelgebruikte tekenreeksen converteren naar geldige tijdstempelwaarden. De volgende voorbeelden moeten duidelijk maken:

Datums toevoegen, aftrekken en vergelijken

Het is mogelijk om specifieke tijdsperioden toe te voegen aan en af ​​te trekken van een datum. Dit kan gedaan worden met behulp van de date_add () en date_sub () functies. U kunt ook de date_diff () functie om twee datums af te trekken en het verschil tussen hen uit te voeren in termen van jaren, maanden en dagen, of iets anders.

Over het algemeen is het eenvoudiger om een ​​dergelijke datum- en tijdgerelateerde rekenkundige bewerking in object-georiënteerde stijl te doen met de Datum Tijd klasse in plaats van het procedureel te doen. We proberen beide stijlen hier, en je kunt kiezen welke je het leukst vindt.

formaat ('% Y jaar,% M maanden en% d dagen'); $ present = new DateTime ('now'); $ future = new DateTime ('laatste dag van januari 2024'); $ interval = $ present-> diff ($ toekomst); // Output - 05 jaar, 04 maanden en 17 dagen echo $ interval-> formaat ('% Y jaar,% M maanden en% d dagen'); ?>

Tijdens gebruik DateTime :: diff (), de Datum Tijd object waarop de diff () methode wordt aangeroepen, wordt afgetrokken van de Datum Tijd object dat wordt doorgegeven aan de diff () methode. Wanneer u procedurestijlcode schrijft, wordt de eerste datumparameter afgetrokken van de tweede datumparameter.

Zowel de functie als de methode retourneren a DateInterval () object dat het verschil tussen twee datums vertegenwoordigt. Dit interval kan worden opgemaakt om een ​​specifieke uitvoer te geven met alle tekens die worden vermeld in de formaat() methode documentatie.

Het verschil tussen objectgeoriënteerde stijl en procedurele stijl wordt duidelijker bij het aftrekken of toevoegen van een tijdsinterval.

U kunt een nieuwe instantiëren Datum Tijd object met behulp van de Datum Tijd() constructeur. Op dezelfde manier kunt u een a instellen DateInterval object met behulp van de  DateInterval () constructeur. Het accepteert een string als parameter. De intervalteken begint met P, wat betekent periode. Hierna kunt u elke periode opgeven met behulp van een geheel getal en het teken dat aan een bepaalde periode is toegewezen. Controleer de DateInterval documentatie voor meer details.

Hier is een voorbeeld dat illustreert hoe gemakkelijk het is om datums en tijden in PHP toe te voegen of af te trekken.

toe te voegen ($ the_interval); // Output - Het zal zaterdag zijn, 05 maart, 2039 na 20 jaar, 05 maanden en 20 dagen vanaf vandaag. echo 'Het zal zijn'. $ now-> format ('l, d F, Y'). ' na '. $ the_interval-> indeling ("% Y jaar,% M maanden en% d dagen").' vanaf vandaag.'; $ now = date_create ('nu'); $ the_interval = date_interval_create_from_date_string ('20 jaar 05 maanden 20 dagen '); date_add ($ now, $ the_interval); // Output - Het zal zaterdag zijn, 05 maart, 2039 na 20 jaar, 05 maanden en 20 dagen vanaf vandaag. echo 'Het zal zijn'. $ now-> format ('l, d F, Y'). ' na '. $ the_interval-> indeling ("% Y jaar,% M maanden en% d dagen").' vanaf vandaag.'; ?>

U kunt ook datums in PHP vergelijken met behulp van vergelijkingsoperatoren. Dit kan zo nu en dan van pas komen. Laten we een kerstdagenteller maken met behulp van de vergelijkingsoperatoren en andere Datum Tijd methoden.

 $ kerstmis) $ christmas-> add (new DateInterval ('P1Y'));  if ($ nu < $christmas)  $interval = $now->diff ($ kerst); echo $ interval-> indeling ('% a dagen'). ' tot Kerstmis! ';  if ($ now == $ christmas) echo 'Merry Christmas :)';  // Output - 103 dagen tot Kerstmis! ?>

We begonnen met het creëren van twee Datum Tijd objecten om de huidige tijd en de datum van de kerst van dit jaar op te slaan. Daarna voeren we een terwijl loop om 1 jaar bij te blijven tot de kerstdatum van 2018 tot de huidige datum minder is dan de kerstdatum. Dit is handig als de code wordt uitgevoerd op 18 januari 2024. De while-lus verhoogt de kerstdatum zolang deze minder is dan de huidige datum ten tijde van het uitvoeren van dit script.

Onze kerstdagenteller werkt nu nog tientallen jaren zonder problemen.

Laatste gedachten

In deze zelfstudie hebben we geleerd hoe de huidige datum en tijd in een gewenst formaat moeten worden uitgevoerd met behulp van de datum() functie. We hebben dat ook gezien datum() kan ook worden gebruikt om alleen het huidige jaar, de huidige maand, enzovoort te krijgen. Daarna hebben we geleerd hoe je de huidige tijdstempel kunt krijgen of een geldig tijdstempel kunt converteren Datum Tijd teken een tijdstempel in. Ten slotte hebben we geleerd hoe we een tijdsperiode kunnen toevoegen of aftrekken van verschillende datums.

Ik heb geprobeerd de sleutel af te dekken Datum Tijd functies en methoden hier. Je moet zeker de documentatie bekijken om te lezen over de functies die niet worden behandeld in de tutorial. Als u vragen heeft, kunt u me dit laten weten in de opmerkingen.