Zoeken…


Syntaxis

  • string date (string $ format [, int $ timestamp = time ()])
  • int strtotime (string $ time [, int $ now])

Parse Engelse datumbeschrijvingen in een datumnotatie

Met de strtotime() -functie in combinatie met date() kunt u verschillende Engelse tekstbeschrijvingen naar datums ontleden:

// 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

Converteer een datum naar een ander formaat

De basis

De eenvoudige manier om het ene datumformaat naar het andere te converteren, is door strtotime() met date() . strtotime() converteert de datum naar een Unix-tijdstempel . Die Unix-tijdstempel kan vervolgens worden doorgegeven aan date() om deze naar het nieuwe formaat te converteren.

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

Of als one-liner:

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

Houd er rekening mee dat strtotime() vereist dat de datum een geldig formaat heeft . Als u geen geldig formaat opgeeft, zal strtotime() false retourneren, waardoor uw datum 1969-12-31 wordt.

DateTime()

Vanaf PHP 5.2 bood PHP de klasse DateTime() , die ons krachtigere tools biedt voor het werken met datums (en tijd). We kunnen de bovenstaande code als volgt herschrijven met DateTime() :

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

Werken met Unix-tijdstempels

date() neemt een Unix-tijdstempel als tweede parameter en retourneert een opgemaakte datum voor u:

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

DateTime () werkt met Unix-tijdstempels door een @ toe te voegen vóór de tijdstempel:

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

Als de tijdstempel die u hebt in milliseconden is (deze kan eindigen op 000 en / of de tijdstempel is dertien tekens lang), moet u deze omzetten in seconden voordat u deze kunt converteren naar een ander formaat. Er zijn twee manieren om dit te doen:

  • Snijd de laatste drie cijfers weg met behulp van substr()

Het bijsnijden van de laatste drie cijfers kan op verschillende manieren worden bereikt, maar het gebruik van substr() is het gemakkelijkst:

$timestamp = substr('1234567899000', -3);
  • Deel het substraat door 1000

U kunt de tijdstempel ook in seconden converteren door deze te delen door 1000. Omdat de tijdstempel te groot is voor 32-bits systemen om wiskunde op uit te voeren, moet u de BCMath- bibliotheek gebruiken om de wiskunde als tekenreeksen uit te voeren:

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

Om een Unix-tijdstempel te krijgen, kunt u strtotime() die een Unix-tijdstempel retourneert:

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

Met DateTime () kunt u DateTime::getTimestamp()

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

Als u PHP 5.2 gebruikt, kunt u in plaats daarvan de optie U opmaak gebruiken:

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

Werken met niet-standaard en dubbelzinnige datumnotaties

Helaas zijn niet alle datums waarmee een ontwikkelaar moet werken in een standaardindeling. Gelukkig heeft PHP 5.3 ons daar een oplossing voor gegeven. DateTime::createFromFormat() stelt ons in staat PHP te vertellen in welk formaat een DateTime::createFromFormat() is, zodat deze met succes kan worden ontleed in een DateTime-object voor verdere manipulatie.

$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');

In PHP 5.4 hebben we de mogelijkheid gekregen om klassetoegang te doen bij instantiatie, waarmee we onze DateTime() -code in een one-liner kunnen veranderen:

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

Helaas werkt dit nog niet met DateTime::createFromFormat() .

Vooraf gedefinieerde constanten gebruiken voor datumnotatie

We kunnen vooraf gedefinieerde constanten voor datumformaat in date() plaats van de conventionele tekenreeksen voor datumformaat sinds PHP 5.1.0.


Vooraf gedefinieerde datumindeling Constanten beschikbaar

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

DATE_COOKIE - HTTP-cookies (vrijdag 22-jul-16 14:50:01 UTC)

DATE_RSS - RSS (vr, 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 (vr, 22 juli 16 14:50:01 +0000)

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

DATE_RFC1036 - RFC 1036 (vr, 22 juli 16 14:50:01 +0000)

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

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

DATE_RFC3339 - Hetzelfde als DATE_ATOM (2016-07-22T14: 50: 01 + 00: 00)


Gebruiksvoorbeelden

echo date(DATE_RFC822);

Dit wordt uitgevoerd: vr, 22 juli 16 14:50:01 +0000

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

Dit zal uitvoeren: 1947-08-15T00: 00: 00 + 05: 30

Het verschil krijgen tussen twee datums / tijden

De meest haalbare manier is om de DateTime klasse te gebruiken.

Een voorbeeld:

<?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);

Het vergelijken van twee datums is ook veel eenvoudiger, gebruik gewoon de vergelijkingsoperatoren , zoals:

<?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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow