Sök…


Syntax

  • strängdatum (sträng $ format [, int $ timestamp = tid ()])
  • int strtotime (string $ time [, int $ now])

Analysera engelska datumbeskrivningar i ett datumformat

Med strtotime() kombination med date() du analysera olika engelska textbeskrivningar till datum:

// Gets the current date
echo date("m/d/Y", strtotime("now")), "\n"; // prints the current date
echo date("m/d/Y", strtotime("10 September 2000")), "\n"; // prints September 10, 2000 in the m/d/Y format
echo date("m/d/Y", strtotime("-1 day")), "\n"; // prints yesterday's date
echo date("m/d/Y", strtotime("+1 week")), "\n"; // prints the result of the current date + a week
echo date("m/d/Y", strtotime("+1 week 2 days 4 hours 2 seconds")), "\n"; // same as the last example but with extra days, hours, and seconds added to it
echo date("m/d/Y", strtotime("next Thursday")), "\n"; // prints next Thursday's date
echo date("m/d/Y", strtotime("last Monday")), "\n"; // prints last Monday's date
echo date("m/d/Y", strtotime("First day of next month")), "\n"; // prints date of first day of next month
echo date("m/d/Y", strtotime("Last day of next month")), "\n"; // prints date of last day of next month
echo date("m/d/Y", strtotime("First day of last month")), "\n"; // prints date of first day of last month
echo date("m/d/Y", strtotime("Last day of last month")), "\n"; // prints date of last day of last month

Konvertera ett datum till ett annat format

Det grundläggande

Det enkla sättet att konvertera ett datumformat till ett annat är att använda strtotime() med date() . strtotime() konverterar datumet till en Unix-tidsstämpel . Det Unix tidsstämpel kan sedan skickas till date() att konvertera det till det nya formatet.

$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);

Eller som enfoder:

$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));

Tänk på att strtotime() kräver att datumet är i ett giltigt format . Underlåtenhet att tillhandahålla ett giltigt format kommer att leda till att strtotime() returnerar falsk vilket kommer att leda till att ditt datum är 1969-12-31.

Använda DateTime()

Från PHP 5.2 erbjöd PHP klassen DateTime() som erbjuder oss kraftfullare verktyg för att arbeta med datum (och tid). Vi kan skriva om koden ovan med DateTime() så:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');

Arbeta med Unix-tidsstämplar

date() tar en Unix-tidsstämpel som sin andra parameter och returnerar ett formaterat datum för dig:

$new_date_format = date('Y-m-d H:i:s', '1234567890');

DateTime () fungerar med Unix-tidsstämplar genom att lägga till en @ före tidsstämpeln:

$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');

Om tidsstämpeln du har är i millisekunder (den kan sluta i 000 och / eller tidsstämpeln är tretton tecken lång) måste du konvertera den till sekunder innan du kan konvertera den till ett annat format. Det finns två sätt att göra detta:

  • Klipp av de tre sista siffrorna med hjälp av substr()

Att klippa de tre sista siffrorna kan uppnås på flera sätt, men substr() är enklast att använda substr() :

$timestamp = substr('1234567899000', -3);
  • Dela underlaget med 1000

Du kan också konvertera tidsstämpeln till sekunder genom att dela med 1000. Eftersom tidsstämpeln är för stor för 32-bitars-system för att göra matematik måste du använda BCMath- biblioteket för att göra matematiken som strängar:

$timestamp = bcdiv('1234567899000', '1000');

För att få en Unix Timestamp kan du använda strtotime() som returnerar en Unix Timestamp:

$timestamp = strtotime('1973-04-18');

Med DateTime () kan du använda DateTime::getTimestamp()

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();

Om du kör PHP 5.2 kan du använda U formateringsalternativet istället:

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');

Arbetar med icke-standardiserade och tvetydiga datumformat

Tyvärr är inte alla datum som en utvecklare måste arbeta med i ett standardformat. Lyckligtvis PHP 5.3 gav oss en lösning för det. DateTime::createFromFormat() tillåter oss att berätta för PHP vilket format en datumsträng är i så att den kan framgångsrikt analyseras i ett DateTime-objekt för ytterligare manipulation.

$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');

I PHP 5.4 fick vi förmågan att göra tillgång till klassmedlemmar vid inställning har lagts till vilket gör att vi kan förvandla vår DateTime() till en enfodring:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

Tyvärr fungerar detta inte med DateTime::createFromFormat() ännu.

Använda fördefinierade konstanter för datumformat

Vi kan använda fördefinierade konstanter för datumformat i date() istället för de konventionella datumformatsträngarna sedan PHP 5.1.0.


Fördefinierade konstaterade datumformat

DATE_ATOM - Atom (2016-07-22T14: 50: 01 + 00: 00)

DATE_COOKIE - HTTP-kakor (fredag 22-jul-16 14:50:01 UTC)

DATE_RSS - RSS (fre, 22 jul. 2016 14:50:01 +0000)

DATE_W3C - World Wide Web Consortium (2016-07-22T14: 50: 01 + 00: 00)

DATE_ISO8601 - ISO-8601 (2016-07-22T14: 50: 01 + 0000)

DATE_RFC822 - RFC 822 (fre, 22 jul 16 14:50:01 +0000)

DATE_RFC850 - RFC 850 (fredag 22-jul-16 14:50:01 UTC)

DATE_RFC1036 - RFC 1036 (fre, 22 jul 16 14:50:01 +0000)

DATE_RFC1123 - RFC 1123 (fre, 22 jul 2016 14:50:01 +0000)

DATE_RFC2822 - RFC 2822 (fre, 22 jul 2016 14:50:01 +0000)

DATE_RFC3339 - Samma som DATE_ATOM (2016-07-22T14: 50: 01 + 00: 00)


Exempel på användning

echo date(DATE_RFC822);

Detta kommer att matas ut: fre 22 jul 16 14:50:01 +0000

echo date(DATE_ATOM,mktime(0,0,0,8,15,1947));

Detta kommer att matas ut: 1947-08-15T00: 00: 00 + 05: 30

Få skillnaden mellan två datum / tider

Det mest genomförbara sättet är att använda, klassen DateTime .

Ett exempel:

<?php
// Create a date time object, which has the value of ~ two years ago
$twoYearsAgo = new DateTime("2014-01-18 20:05:56");
// Create a date time object, which has the value of ~ now
$now = new DateTime("2016-07-21 02:55:07");

// Calculate the diff
$diff = $now->diff($twoYearsAgo);

// $diff->y contains the difference in years between the two dates
$yearsDiff = $diff->y;
// $diff->m contains the difference in minutes between the two dates
$monthsDiff = $diff->m;
// $diff->d contains the difference in days between the two dates
$daysDiff = $diff->d;
// $diff->h contains the difference in hours between the two dates
$hoursDiff = $diff->h;
// $diff->i contains the difference in minutes between the two dates
$minsDiff = $diff->i;
// $diff->s contains the difference in seconds between the two dates
$secondsDiff = $diff->s;

// Total Days Diff, that is the number of days between the two dates
$totalDaysDiff = $diff->days;

// Dump the diff altogether just to get some details ;)
var_dump($diff);

Att jämföra två datum är också mycket lättare, använd bara jämförande operatörer , som:

<?php
// Create a date time object, which has the value of ~ two years ago
$twoYearsAgo = new DateTime("2014-01-18 20:05:56");
// Create a date time object, which has the value of ~ now
$now = new DateTime("2016-07-21 02:55:07");
var_dump($now > $twoYearsAgo); // prints bool(true)
var_dump($twoYearsAgo > $now); // prints bool(false)
var_dump($twoYearsAgo <= $twoYearsAgo); // prints bool(true)
var_dump($now == $now); // prints bool(true)


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow