Formaterer gjeldende dato og klokkeslett i PHP

Du vil ofte jobbe med datoer og tider når du utvikler nettsteder. For eksempel må du kanskje vise den siste endrede datoen på et innlegg eller nevne hvor lenge siden en leser skrev noen kommentar. Du må kanskje også vise nedtelling av dagene til en spesiell hendelse.

Heldigvis kommer PHP med noen innebygde dato- og tidsfunksjoner som vil hjelpe oss med å gjøre alt det og mye mer ganske enkelt.

Denne opplæringen vil lære deg hvordan du formaterer gjeldende dato og klokkeslett i PHP. Du vil også lære hvordan du får tidsstempel fra en datastreng og hvordan du legger til og trekker forskjellige datoer.

Få dato og klokkeslett i strengformat

dato ($ format, $ tidsstempel) er en av de mest brukte dato- og tidsfunksjonene som er tilgjengelige i PHP. Det tar det ønskede utdataformatet for datoen som den første parameteren og et heltall som en tidsstempelverdi som må konverteres til det angitte datoformatet. Den andre parameteren er valgfri, og utelating vil gi utdata gjeldende dato og klokkeslett i strengformat basert på verdien av $ format.

De $ format parameteren aksepterer en serie tegn som gyldige verdier. Noen av disse tegnene har rettferdige betydninger: Y gir deg den fulle numeriske representasjonen av året med 4 siffer (2018) og y gir deg bare de to siste sifrene i inneværende år (18). på samme måte, H vil gi deg timen i 24-timers format med ledende nuller, men h vil gi deg timen i 12-timers format med ledende nuller. 

Her er noen av de vanligste datoformatene og deres verdier.

Karakter Betydning Eksempel
d Dag i måneden med ledende nuller 03 eller 17
j dag i måneden uten ledende nuller 3 eller 17
D ukedag som en forkortelse på tre bokstaver man
l hel dag i uken mandag
m måned som nummer med ledende nuller 09 eller 12
n måned som nummer uten ledende nuller 9 eller 12
M måned som en tre-bokstav forkortelse september
F hele måneden september
y tosifret år 18
Y hele året 2018

Det er mange andre spesialtegn for å spesifisere produksjonen for Dato() funksjon. Det er best å konsultere formattabellbordet i Dato() funksjonsdokumentasjon for mer informasjon om spesielle saker.

La oss se noen praktiske eksempler på Dato() fungere nå. Vi kan bruke den til å få gjeldende år, nåværende måned, nåværende time, etc., eller vi kan bruke den til å få en komplett datostreng.

Du kan også bruke Dato() funksjon for å utføre tiden. Her er noen av de mest brukte tidsformatkarakterene:

Karakter Betydning Eksempel
g timer i 12-timers format uten ledende nuller 1 eller 12
h timer i 12-timers format med ledende nuller 01 eller 12
G timer i 24-timers format uten ledende nuller 1 eller 13
H timer i 24-timers format med ledende nuller 01 eller 13
en am / pm i små bokstaver er
EN am / pm i store bokstaver ER
Jeg minutter med ledende nuller 09 eller 15
s sekunder med ledende nuller 05 eller 30

Og her er noen eksempler på å skrive ut formaterte tidsstrenge.

// Output - 11:03:37 ekko dato ('h: i: s A'); // Utgang - torsdag, 11:04:09 ekko dato ('l, h: i: s A'); // Utgang - 13. september 2018, 11:05:00 ekko dato ('d F Y, h: i: s A'); ?>

Det er også viktig at du unnslipper disse spesialtegnene hvis du vil bruke dem i din datastreng.

Få Unix Timestamp

Noen ganger må du få verdien av gjeldende Unix tidsstempel i PHP. Dette er veldig enkelt ved hjelp av tid() funksjon. Den returnerer et heltall som beskriver antall millisekunder som har gått siden 1. januar 1970 ved midnatt (00:00:00) GMT.

Du kan også bruke denne funksjonen til å gå frem og tilbake i tide. For å gjøre det, er alt du trenger å gjøre, å trekke riktig antall sekunder fra gjeldende verdi av tid() og deretter endre den resulterende verdien til ønsket datostreng. Her er to eksempler:

En viktig ting du bør huske er at tidsstempelverdien returnert av tid() er tidszonen agnostisk og får antall sekunder siden 1. januar 1970 kl. 00:00:00 UTC. Dette betyr at denne funksjonen på et bestemt tidspunkt vil returnere samme verdi i USA, Europa, India eller Japan.

En annen måte å få tidsstempel for en bestemt dato ville være å bruke mktime ($ time, $ minutt, $ sekund, $ måned, $ dag, $ år) funksjon. Når alle parametrene er utelatt, bruker denne funksjonen bare gjeldende lokale dato og klokkeslett for å beregne tidsstempelverdien. Denne funksjonen kan også brukes med Dato() å generere nyttige dato- og tidsstrenge.

I utgangspunktet, tid() kan brukes til å gå frem og tilbake til en tidsperiode, mens mktime () er nyttig når du vil gå til et bestemt tidspunkt.

Konverter en datetime-streng til en tidsstempel

De strtotime ($ tid, [$ nå = tid ()]) funksjonen vil være utrolig nyttig når du vil konvertere forskjellige dato og tid verdier i strengformat til en tidsstempel. Funksjonen kan analysere nesten alle slags datetime-strenger i tidsstempler.

Du bør definitivt sjekke gyldige tidsformater, datoformater, sammensatte datetimeformater og relative datetimeformater.

Med relative datetimeformater kan denne funksjonen enkelt konvertere vanlige strenger til gyldige tidsstempelverdier. Følgende eksempler skal gjøre det klart:

Legge til, trekke ut og sammenligne datoer

Det er mulig å legge til og trekke fra bestemte tidsperioder til og fra en dato. Dette kan gjøres ved hjelp av date_add () og date_sub () funksjoner. Du kan også bruke date_diff () funksjon å trekke to datoer og gi ut forskjellen mellom dem når det gjelder år, måneder og dager eller noe annet.

Generelt er det lettere å gjøre en slik dato- og tidsrelatert aritmetikk i objektorientert stil med Dato tid klasse i stedet for å gjøre det prosedyrisk. Vi prøver begge disse stilene her, og du kan velge hvilken du liker mest.

format ('% Y år,% M måneder og% d dager'); $ present = ny DateTime ('nå'); $ future = ny DateTime ('siste dag i januar 2024'); $ interval = $ present-> diff ($ fremtid); // Utgang - 05 år, 04 måneder og 17 dager ekko $ intervall-> format ('% Y år,% M måneder og% d dager'); ?>

Når du bruker Datetime :: diff (), de Dato tid objekt som den diff () Metoden kalles subtraheres fra Dato tid objekt som sendes til diff () metode. Når du skriver prosedyrisk stilkode, trekkes den første dataparameteren fra den andre dataparameteren.

Både funksjon og metode returnerer a DateInterval () objekt som representerer forskjellen mellom to datoer. Dette intervallet kan formateres for å gi en bestemt utgang med alle tegnene som er oppført i format() metode dokumentasjon.

Forskjellen mellom objektorientert stil og prosessorisk stil blir tydeligere når man trekker eller legger til et tidsintervall.

Du kan instantiere en ny Dato tid objekt ved hjelp av Dato tid() konstruktør. På samme måte kan du instantiere en DateInterval objekt ved hjelp av  DateInterval () konstruktør. Den aksepterer en streng som parameter. Intervallstrengen starter med P, som betyr periode. Deretter kan du spesifisere hver periode ved hjelp av et heltall og karakteren tilordnet til en bestemt periode. Du bør sjekke DateInterval dokumentasjon for flere detaljer.

Her er et eksempel som illustrerer hvor enkelt det er å legge til eller trekke fra datoer og tider i PHP.

legge til ($ the_interval); // Output - Det blir lørdag, 05 mars, 2039 etter 20 år, 05 måneder og 20 dager fra i dag. ekko 'Det vil være'. $ nå-> format ('l, d F, Y'). ' etter '. $ the_interval-> format ("% Y år,% M måneder og% d dager").' fra i dag.'; $ nå = date_create ('nå'); $ the_interval = date_interval_create_from_date_string ('20 år 05 måneder 20 dager '); date_add ($ nå, $ the_interval); // Output - Det blir lørdag, 05 mars, 2039 etter 20 år, 05 måneder og 20 dager fra i dag. ekko 'Det vil være'. $ nå-> format ('l, d F, Y'). ' etter '. $ the_interval-> format ("% Y år,% M måneder og% d dager").' fra i dag.'; ?>

Du kan også sammenligne datoer i PHP ved hjelp av sammenligningsoperatører. Dette kan komme til nytte hver nå og da. La oss lage en julebordsteller ved hjelp av sammenligningsoperatørene og andre Dato tid fremgangsmåter.

 $ jul) $ christmas-> legg til (ny DateInterval ('P1Y'));  hvis ($ nå < $christmas)  $interval = $now->diff ($ jul); ekko $ interval-> format ('% a days'). ' til jul! ';  hvis ($ nå == $ christmas) echo 'Merry Christmas :)';  // Output - 103 dager til jul! ?>

Vi begynte med å skape to Dato tid gjenstander for å lagre nåtiden og datoen for årets jul. Etter det kjører vi en samtidig som sløyfe for å fortsette å legge til 1 år til juledagen 2018 til nåværende dato er mindre enn juledagen. Dette vil være nyttig når koden løper 18. januar 2024. Samtidig sløyfen vil øke julemiddagen så lenge den er mindre enn den nåværende datoen når du kjører dette skriptet.

Vårt julebord vil nå fungere i flere tiår uten problemer.

Siste tanker

I denne opplæringen lærte vi hvordan du utdata gjeldende dato og klokkeslett i ønsket format ved hjelp av Dato() funksjon. Vi så det også Dato() kan også brukes til å få bare nåværende år, måned og så videre. Etter det lærte vi hvordan vi skulle få dagens tidstempel eller konvertere en gyldig Dato tid streng inn i en tidsstempel. Til slutt lærte vi å legge til eller trekke en tidsperiode fra forskjellige datoer.

Jeg har forsøkt å dekke nøkkelen Dato tid funksjoner og metoder her. Du bør definitivt ta en titt på dokumentasjonen for å lese om funksjonene som ikke er dekket i opplæringen. Hvis du har spørsmål, er du velkommen til å gi meg beskjed i kommentarene.