Recherche…


Syntaxe

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

Analyser les descriptions de date en anglais dans un format de date

En utilisant la fonction strtotime() combinée avec date() vous pouvez analyser différentes descriptions de texte anglais à des dates:

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

Convertir une date dans un autre format

Les bases

Le moyen le plus simple de convertir un format de date en un autre est d'utiliser strtotime() avec date() . strtotime() convertira la date en un horodatage Unix . Cet horodatage Unix peut ensuite être transmis à date() pour le convertir au nouveau format.

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

Ou comme un one-liner:

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

Gardez à l'esprit que strtotime() requiert que la date soit dans un format valide . strtotime() ne fournissez pas un format valide, strtotime() renverra false, ce qui entraînera votre date du 1969-12-31.

Utiliser DateTime()

Depuis PHP 5.2, PHP offrait la classe DateTime() qui nous offre des outils plus puissants pour travailler avec les dates (et les heures). Nous pouvons réécrire le code ci-dessus en utilisant DateTime() comme suit:

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

Travailler avec les horodatages Unix

date() prend un timestamp Unix comme second paramètre et renvoie une date formatée pour vous:

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

DateTime () fonctionne avec les horodatages Unix en ajoutant un @ avant le timestamp:

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

Si l'horodatage que vous avez est en millisecondes (il peut se terminer en 000 et / ou que l'horodatage comporte treize caractères), vous devrez le convertir en secondes avant de pouvoir le convertir dans un autre format. Il y a deux façons de faire cela:

  • Coupez les trois derniers chiffres en utilisant substr()

Le découpage des trois derniers chiffres peut être obtenu de plusieurs manières, mais l'utilisation de substr() est la plus simple:

$timestamp = substr('1234567899000', -3);
  • Diviser les substrats par 1000

Vous pouvez également convertir l'horodatage en secondes en divisant par 1000. Étant donné que l'horodatage est trop grand pour que les systèmes 32 bits puissent faire des calculs, vous devrez utiliser la bibliothèque BCMath pour effectuer les calculs sous forme de chaînes:

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

Pour obtenir un horodatage Unix, vous pouvez utiliser strtotime() qui renvoie un horodatage Unix:

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

Avec DateTime (), vous pouvez utiliser DateTime::getTimestamp()

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

Si vous utilisez PHP 5.2, vous pouvez utiliser l'option de formatage U place:

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

Travailler avec des formats de date non standard et ambigus

Malheureusement, toutes les dates avec lesquelles un développeur doit travailler sont dans un format standard. Heureusement, PHP 5.3 nous a fourni une solution pour cela. DateTime::createFromFormat() nous permet d'indiquer à PHP le format dans lequel une chaîne de date est DateTime::createFromFormat() de sorte qu'elle puisse être analysée avec succès dans un objet DateTime pour une manipulation ultérieure.

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

En PHP 5.4, nous avons eu la possibilité d’ajouter l’accès des membres de classe à l’instanciation, ce qui nous permet de transformer notre code DateTime() en une ligne unique:

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

Malheureusement, cela ne fonctionne pas encore avec DateTime::createFromFormat() .

Utilisation de constantes prédéfinies pour le format de date

Nous pouvons utiliser des constantes prédéfinies pour le format de date() dans date() au lieu des chaînes de format de date classiques depuis PHP 5.1.0.


Format de date prédéfini Constantes disponibles

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

DATE_COOKIE - Cookies HTTP (vendredi 22 juillet 2016 à 14:50:01 UTC)

DATE_RSS - RSS (ven. 22 juil. 2016 14:50:01 +0000)

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

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

DATE_RFC822 - RFC 822 (ven. 22 juil. 16 14:50:01 +0000)

DATE_RFC850 - RFC 850 (vendredi 22 juillet 2016 à 14:50:01 UTC)

DATE_RFC1036 - RFC 1036 (ven. 22 juil. 16 14:50:01 +0000)

DATE_RFC1123 - RFC 1123 (ven. 22 juil. 2016 14:50:01 +0000)

DATE_RFC2822 - RFC 2822 (ven. 22 juil. 2016 14:50:01 +0000)

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


Exemples d'utilisation

echo date(DATE_RFC822);

Cela va sortir: Ven, 22 Jul 16 14:50:01 +0000

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

Cela va sortir: 1947-08-15T00: 00: 00 + 05: 30

Obtenir la différence entre deux dates / heures

Le moyen le plus pratique est d'utiliser la classe DateTime .

Un exemple:

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

En outre, il est beaucoup plus facile de comparer deux dates. Il suffit d'utiliser les opérateurs de comparaison , tels que:

<?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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow