PHP och datum

Tråden skapades och har fått 12 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Höganäs
  • 2003-03-07 11:53

Om man som jag är van att använda FileMaker för att manipulera datum via FMP´s inbyggda beräkningsfält
och datumfunktioner, är det helt klart besvärligt att försöka göra samma sak mha PHP...
Därför vänder jag mig till e-postlistan!

Problemet:

Jag vill från ett datum i formatet YYYY-MM-DD ta reda på:

"DayofYear"
"DayofWeek"
"DayName"

samt trolla fram ex "dagen före" och "dagen efter". (Inte _den_ dagen efter - det kan jag i värsta fall klara själv )

Tacksam för hjälp!

[ 07. mars 2003, 11:54: Meddelandet ändrat av: Micke F ]

Här finns allt du behöver veta:

http://www.php.net/manual/en/function.date.php

För att trolla fram dagen efter går det med en enkel minusoperation. Se exempel 3 på sidan ovan.

Du behöver kolla följande PHP-funktioner:

date()
mktime()
getdate()

Utifrån dessa kan du antingen hämta datumuppgifter från systemet eller skapa datum utifrån variabler som inte är i datumformat.

Några exempel:

Citat:

kod:<pre style="font-size:x-small; font-family: monospace;"><?php
// 1. Dagens datum hämtas från tidsfunktionen date()

$idag = date("Y-m-d");
echo $idag;

// 2. Skapa datum från någon variabel som inte är i datumformat
// och gör om dessa till datumformat med mktime() och getdate()

$year = 2003;
$month = 03;
$day = 07;

$today = getdate (mktime (0,0,0,$month,$day,$year));
$yesterday = getdate (mktime (0,0,0,$month,$day-1,$year));
$tomorrow = getdate (mktime (0,0,0,$month,$day+1,$year));

print "
";
print "
";
print "Veckodag: " . $yesterday[´weekday´] . "
";
print "Dag i veckan: " . $yesterday[´wday´] . "
";
print "Dag i år: " . $yesterday[´yday´] . "
";
print "
";
print "Veckodag: " . $today[´weekday´] . "
";
print "Dag i veckan: " . $today[´wday´] . "
";
print "Dag i år: " . $today[´yday´] . "
";
print "
";
print "Veckodag: " . $tomorrow[´weekday´] . "
";
print "Dag i veckan: " . $tomorrow[´wday´] . "
";
print "Dag i år: " . $tomorrow[´yday´] . "
";

print "
";
print "
";

// 3. Skapa datum från dagens datum (i datumformat) och manipulera genom
// beräkningar i mktime()

$imorgon = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));
$forra_manaden = mktime (0,0,0,date("m")-1,date("d"), date("Y"));
$nasta_ar = mktime (0,0,0,date("m"), date("d"), date("Y")+1);

echo date("Y-m-d", $imorgon);
print "
";
echo date("Y-m-d", $forra_manaden);
print "
";
echo date("Y-m-d", $nasta_ar);

?> </pre>

//Mikael

  • Medlem
  • Höganäs
  • 2003-03-07 13:38

Tack Mikael Svensson!!!

  • Medlem
  • Höganäs
  • 2003-03-07 13:50

Nu när jag tittat närmare på koden hittar jag det som passar in i mitt fall:

Citat:

citera:// 2. Skapa datum från någon variabel som inte är i datumformat
// och gör om dessa till datumformat med mktime() och getdate()

$year = 2003;
$month = 03;
$day = 01;

$yesterday = getdate (mktime (0,0,0,$month,$day-1,$year));
$tomorrow = getdate (mktime (0,0,0,$month,$day+1,$year));

Hur får jag $yesterday och $tomorrow i datumformatet YYYY-MM-DD ?

  • Medlem
  • Höganäs
  • 2003-03-07 13:55

Kom på det:

Citat:

kod:<pre style="font-size:x-small; font-family: monospace;">
print "Datum: " . $tomorrow[´year´] . "-". $tomorrow[´mon´] . "-" . $tomorrow[´mday´] . "
"; </pre>

Dock blir formen 2003-3-8 och inte 2003-03-08 ...

Hur fixar jag det smidigt?

  • Medlem
  • Höganäs
  • 2003-03-07 14:04

Ha!

Citat:

kod:<pre style="font-size:x-small; font-family: monospace;">if ($tomorrow["mon"] < 10) {
$tomorrow["mon"] = "0" . $tomorrow["mon"];
}

if ($tomorrow["mday"] < 10) {
$tomorrow["mday"] = "0" . $tomorrow["mday"];
}

print "Datum: " . $tomorrow[´year´] . "-". $tomorrow[´mon´] . "-" . $tomorrow[´mday´] . "
"; </pre>

... eller:

Citat:

kod:<pre style="font-size:x-small; font-family: monospace;">$yesterday = mktime (0,0,0,$month,$day-1,$year);
echo date("Y-m-d", $yesterday); </pre>

//Mikael

date("Y-m-d-" ,$yesterday)
borde funka, OBS att det är stort Y för att få fyrsiffrigt årtal. $yesterday måste vara korrekt datumformatterat med hjälp av mktime()

[Edit: MS hann före... :rolleyes: ]

[ 07. mars 2003, 15:45: Meddelandet ändrat av: Michael Nord ]

Men andra ord skulle han använda funktionen date() som jag länkade till ovan...

Ett annat sätt att få till extra nollor kan vara att köra:

str_pad($yesterday[´mon´], 2, "0", STR_PAD_LEFT);

  • Medlem
  • Höganäs
  • 2003-03-07 14:32

Tack ALLA för god hjälp. Nu har jag den funktion jag behöver för att komma vidare.
Lägger väl upp screenshot / länk när det börjar likna något färdigt...

/M

  • Medlem
  • Stockholm
  • 2003-03-07 15:01

Det här var bra och nyttigt känner jag.
*bookmarking*

  • Medlem
  • Höganäs
  • 2003-03-07 15:32

Här är en bild av det schema som jag tack vare er kan skapa snabbt och effektivt med MySQL/PHP:

Bilden föreställer det schema man ser som hjälp för att välja tider när man bokar objekt som redan är bokade vissa tider/dagar. Vissa justeringar återstår dock...
(png-format)

Fortsätter utveckla systemet (och återkommer förmodligen med MySQL/PHP-frågor...

)
Än en gång: Tack!

[ 07. mars 2003, 15:34: Meddelandet ändrat av: Micke F ]

1
Bevaka tråden