Szukaj…


Składnia

  • string date (string format $ [, int $ timestamp = time ()])
  • int strtotime (ciąg $ time [, int $ teraz])

Przetłumacz angielskie opisy dat na format daty

Korzystając z funkcji strtotime() połączeniu z date() , możesz parsować różne opisy tekstów angielskich do dat:

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

Konwertuj datę na inny format

Podstawy

Najprostszym sposobem na konwersję jednego formatu daty na inny jest użycie strtotime() z date() . strtotime() przekształci datę w uniksowy znacznik czasu . Ten uniksowy znacznik czasu można następnie przekazać do date() aby przekonwertować go na nowy format.

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

Lub jako jedna linijka:

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

Należy pamiętać, że strtotime() wymaga, aby data była w poprawnym formacie . Niedostarczenie prawidłowego formatu spowoduje, że strtotime() zwróci false, co spowoduje, że twoja data to 1969-12-31.

Korzystanie z funkcji DateTime()

Począwszy od PHP 5.2, PHP oferowało klasę DateTime() która oferuje nam potężniejsze narzędzia do pracy z datami (i czasem). Możemy przepisać powyższy kod za pomocą DateTime() w następujący sposób:

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

Praca ze znacznikami czasu Unix

date() przyjmuje uniksowy znacznik czasu jako swój drugi parametr i zwraca sformatowaną datę:

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

DateTime () działa z uniksowymi znacznikami czasu, dodając @ przed znacznikiem czasu:

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

Jeśli posiadany znacznik czasu jest wyrażony w milisekundach (może kończyć się za 000 i / lub znacznik ma długość trzynastu znaków), musisz przekonwertować go na sekundy, zanim będziesz mógł przekonwertować go na inny format. Można to zrobić na dwa sposoby:

  • Przytnij ostatnie trzy cyfry za pomocą substr()

Przycinanie trzech ostatnich cyfr można uzyskać na kilka sposobów, ale użycie substr() jest najłatwiejsze:

$timestamp = substr('1234567899000', -3);
  • Podziel substrat przez 1000

Możesz także przekonwertować znacznik czasu na sekundy, dzieląc przez 1000. Ponieważ znacznik czasu jest zbyt duży, aby systemy 32-bitowe mogły wykonać matematykę, musisz użyć biblioteki BCMath, aby wykonać matematykę jako ciągi znaków:

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

Aby uzyskać uniksowy znacznik czasu, możesz użyć strtotime() który zwraca uniksowy znacznik czasu:

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

Dzięki DateTime () możesz używać DateTime::getTimestamp()

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

Jeśli korzystasz z PHP 5.2, możesz zamiast tego użyć opcji formatowania U :

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

Praca z niestandardowymi i niejednoznacznymi formatami dat

Niestety nie wszystkie daty, z którymi programista musi współpracować, mają standardowy format. Na szczęście PHP 5.3 dostarczyło nam na to rozwiązanie. DateTime::createFromFormat() pozwala nam powiedzieć PHP, w jakim formacie znajduje się ciąg daty, aby można go było pomyślnie przeanalizować w obiekcie DateTime w celu dalszej manipulacji.

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

W PHP 5.4 uzyskaliśmy możliwość wykonywania dostępu członków klasy podczas tworzenia instancji, co pozwala nam przekształcić nasz kod DateTime() w jednowierszowy:

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

Niestety nie działa to jeszcze z DateTime::createFromFormat() .

Używanie predefiniowanych stałych dla formatu daty

Możemy używać predefiniowanych stałych dla formatu date() w date() zamiast konwencjonalnych ciągów formatu daty od PHP 5.1.0.


Dostępne stałe predefiniowanego formatu daty

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

DATE_COOKIE - Pliki cookie HTTP (piątek, 22 lipca 16 14:50:01 UTC)

DATE_RSS - RSS (pt., 22 lipca 2016 14:50:01 +0000)

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

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

DATE_RFC822 - RFC 822 (pt., 22 lipca 16 14:50:01 +0000)

DATE_RFC850 - RFC 850 (piątek, 22 lipca 16 14:50:01 UTC)

DATE_RFC1036 - RFC 1036 (pt., 22 lipca 16 14:50:01 +0000)

DATE_RFC1123 - RFC 1123 (pt., 22 lipca 2016 14:50:01 +0000)

DATE_RFC2822 - RFC 2822 (pt., 22 lipca 2016 14:50:01 +0000)

DATE_RFC3339 - Taki sam jak DATE_ATOM (2016-07-22T14: 50: 01 + 00: 00)


Przykłady użycia

echo date(DATE_RFC822);

To wyświetli: Pt, 22 lipca 16 14:50:01 +0000

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

To da wynik: 1947-08-15T00: 00: 00 + 05: 30

Uzyskiwanie różnicy między dwiema datami / godzinami

Najbardziej wykonalnym sposobem jest użycie klasy DateTime .

Przykład:

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

Ponadto porównywanie dwóch dat jest znacznie łatwiejsze, wystarczy użyć operatorów porównania , takich jak:

<?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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow