Suche…


Syntax

  • Zeichenfolgedatum (Zeichenfolge $ format [, int $ timestamp = time ()])
  • int strtotime (Zeichenfolge $ time [, int $ now])

Analysieren Sie englische Datumsbeschreibungen in ein Datumsformat

Mit der Funktion strtotime() Kombination mit date() Sie verschiedene englische strtotime() date() analysieren

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

Konvertieren Sie ein Datum in ein anderes Format

Die Grundlagen

Die einfachste Möglichkeit zum Konvertieren eines Datumsformats in ein anderes ist die Verwendung von strtotime() mit date() . strtotime() konvertiert das Datum in einen Unix-Zeitstempel . Dieser Unix-Zeitstempel kann dann an date() , um ihn in das neue Format zu konvertieren.

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

Oder als One-Liner:

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

strtotime() Sie, dass für strtotime() das Datum ein gültiges Format haben muss . Wenn Sie kein gültiges Format strtotime() false zurück, wodurch Ihr Datum 1969-12-31 wird.

DateTime()

Ab PHP 5.2 bot PHP die DateTime() Klasse an, die uns leistungsfähigere Werkzeuge für das Arbeiten mit Datum (und Zeit) bietet. Wir können den obigen Code mit DateTime() so umschreiben:

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

Mit Unix-Zeitstempeln arbeiten

date() einen Unix-Zeitstempel als zweiten Parameter und gibt ein formatiertes Datum für Sie zurück:

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

DateTime () arbeitet mit Unix-Zeitstempeln, indem vor dem Zeitstempel ein @ eingefügt wird:

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

Wenn der Zeitstempel in Millisekunden liegt (er kann in 000 enden und / oder der Zeitstempel ist dreizehn Zeichen lang), müssen Sie ihn in Sekunden konvertieren, bevor Sie ihn in ein anderes Format konvertieren können. Es gibt zwei Möglichkeiten, dies zu tun:

  • Schneiden Sie die letzten drei Ziffern mit substr()

Das Trimmen der letzten drei Ziffern kann auf verschiedene Weise erreicht werden. Die Verwendung von substr() ist jedoch am einfachsten:

$timestamp = substr('1234567899000', -3);
  • Teilen Sie das substr durch 1000

Sie können den Zeitstempel auch in Sekunden umwandeln, indem Sie ihn durch 1000 teilen. Da der Zeitstempel für 32-Bit-Systeme zu groß ist, um rechnen zu können, müssen Sie die BCMath- Bibliothek verwenden, um die Berechnung als Zeichenfolgen auszuführen :

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

Um einen Unix-Zeitstempel zu erhalten, können Sie strtotime() der einen Unix-Zeitstempel zurückgibt:

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

Mit DateTime () können Sie DateTime::getTimestamp()

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

Wenn Sie PHP 5.2 ausführen, können Sie stattdessen die U Formatierungsoption verwenden:

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

Arbeiten mit nicht standardmäßigen und mehrdeutigen Datumsformaten

Leider haben nicht alle Daten, mit denen ein Entwickler arbeiten muss, ein Standardformat. Glücklicherweise gab uns PHP 5.3 eine Lösung dafür. DateTime::createFromFormat() ermöglicht es uns, PHP mitzuteilen, in welchem ​​Format eine Datumszeichenfolge vorliegt, damit sie zur weiteren Bearbeitung erfolgreich in ein DateTime-Objekt geparst werden kann.

$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 haben wir die Möglichkeit erhalten, den Zugriff auf DateTime() Instantiierung zu ermöglichen, wodurch wir unseren DateTime() Code in einen DateTime() verwandeln können:

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

Leider funktioniert das mit DateTime::createFromFormat() noch nicht.

Verwenden vordefinierter Konstanten für das Datumsformat

Wir können vordefinierte Konstanten für das Datumsformat in date() anstelle der herkömmlichen Datumsformatzeichenfolgen seit PHP 5.1.0 verwenden.


Vordefinierte Konstanten für das Datumsformat verfügbar

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

DATE_COOKIE - HTTP-Cookies (Freitag, 22-Jul-16, 14:50:01 Uhr UTC)

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

DATE_RFC850 - RFC 850 (Freitag, 22-Jul-16, 14:50:01 Uhr UTC)

DATE_RFC1036 - RFC 1036 (Fr, 22 Jul 16 14:50:01 +0000)

DATE_RFC1123 - RFC 1123 (Fr, 22 Jul 2016 14:50:01 +0000)

DATE_RFC2822 - RFC 2822 (Fr, 22 Jul 2016 14:50:01 +0000)

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


Anwendungsbeispiele

echo date(DATE_RFC822);

Dies wird ausgegeben: Fr, 22 Jul 16 14:50:01 +0000

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

Dies wird ausgegeben: 1947-08-15T00: 00: 00 + 05: 30

Den Unterschied zwischen zwei Datumsangaben erhalten

Die praktikabelste Methode ist die DateTime Klasse.

Ein Beispiel:

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

Der Vergleich von zwei Daten ist auch viel einfacher. Verwenden Sie einfach die Vergleichsoperatoren , z.

<?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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow