DateTime och Fileinfo – Nyheter i PHP 5.3

Detta är del tre i serien om nyheter i PHP 5.3. Tidigare har jag skrivit om Namespaces, Lambda och closures och idag tänkte jag skriva om nyheterna i DateTime-objektet samt fileinfo funktionen.

Ingen av de här funktionerna är helt nya, DateTime klassen har funnits sedan 5.2 men i PHP 5.3 har det tillkommit nya funktioner, Fileinfo har tidigare funnits som PECL paket.

Hantera datum med DateTime

I första delen tänkte jag visa lite nyheter på DateTime-objektet, hur vi lägger till och tar bort ett tidsinterval samt hur vi räknar ut skillnaden mellan två datum.

Definiera tidszon

Innan vi börjar hantera datum måste vi första definiera vilken tidszon vi befinner oss i, detta gör vi på följande sätt.

date_default_timezone_set('Europe/Stockholm');

Skapa ett DateTime-object

$dateObject = new DateTime();
echo $dateObject->format('Y-m-d H:i:s'); //Prints 2010-02-03 22:33:55

Lägg till 2 dagar och en timma

$dateObject = new DateTime();
$dateObject->add(new DateInterval('P2DT1H'));
echo $dateObject->format('Y-m-d H:i:s');

Här skapar vi ett nytt DateTime-objekt. Sedan använder vi funktionen add för att lägga till ett tidsintervall. Detta gör vi med ett DateInterval objekt som tar en inparameter som vid en första anblick ser ganska konstigt ut, P2DT1H.
Delar vid upp den blir det ganska logiskt, P står för Period, vilket betyder år, månad eller dag. T står för time och betyder således tid. P2DT1H betyder alltså, Period, 2 Dagar, Tid, 1 Timma.

Med funktionen add blir det relativt enkelt att lägga till ett intervall på ett datum. Vill du istället ta bort en tid från ett datum använder du funktionen sub.

Ta bort 2 dagar och 1 timma

$dateObject = new DateTime();
$dateObject->sub(new DateInterval('P2DT1H'));
echo $dateObject->format('Y-m-d H:i:s');

Räkna ut skillnaden mellan två datum

$dt1 = new DateTime('2010-02-13');
$diff = $dt1->diff(new DateTime());

Vi använder funktionen diff på DateTime-objektet. Skriver vi ut $diff innehåller den följande.

Här kan vi väldigt enkelt se hur lång tid det skiljer mellan datumen, 8 dagar, 4 timmar, 27 minuter, 5 sekunder. Vi kan enkelt skriva ut hur många dagar det är kvar, i detta fall till min födelsedag.

 echo $diff->days

Hämta filinformation med Fileinfo

Som jag nämnt tidigare har Fileinfo tidigare funnits tillgängligt via PECL. Via Fileinfo kan man ta reda på vilken content-type och encoding en fil har.

 " . $info;
finfo_close($finfo);
?>

Vi börjar med att skapa en ny finfo resurs med finfo_open. Här skickar vi med fördefinierade konstanter och i detta fall, FILEINFO_NONE. Här hittar du fler fördefinierade konstanter.

Sedan använder vi funktionen finfi_file och skickar med finfo-resursen och vilken fil vi ska kontollera, i detta fall en png bild. Sist anropar vi funktionen finfo_close för att stänga resursen.

Här är resultatet av FILEINFO_NONE och FILEINFO_MIME

FILEINFO_NONE => PNG image, 250 x 48, 8-bit/color RGBA, non-interlaced
FILEINFO_MIME => image/png; charset=binary

Vidare läsning

Hoppas denna lilla introduktion gav dig något och vill du läsa mer om dessa klasser rekommenderar jag självklart php.net.
DateTime
Fileinfo information

Demo och källkod

Se Demo eller ladda ner källkoden här

3 thoughts on “DateTime och Fileinfo – Nyheter i PHP 5.3”

  1. Oj, vissa av dessa funktioner, som nu faktiskt är över ett år gamla, hade jag inte upptäckt än! Har redan testan diff-funktionen och denna kommer jag ha GRYM nytta av. (Även om det gått att ordna till på andra sätt såklart)

Din kommentar eller åsikt