89 votes

Comment puis-je trouver la première et la dernière date d'un mois en utilisant PHP ?

Comment puis-je trouver la première et la dernière date d'un mois en utilisant PHP ? Par exemple, nous sommes le 21 avril 2010 ; je veux trouver le 1er avril 2010 et le 30 avril 2010.

0 votes

221voto

Nathan Long Points 30303

Le moyen le plus simple est d'utiliser date qui vous permet de mélanger des valeurs codées en dur avec des valeurs extraites d'un timestamp. Si vous ne donnez pas d'horodatage, il suppose la date et l'heure actuelles.

// Current timestamp is assumed, so these find first and last day of THIS month
$first_day_this_month = date('m-01-Y'); // hard-coded '01' for first day
$last_day_this_month  = date('m-t-Y');

// With timestamp, this gets last day of April 2010
$last_day_april_2010 = date('m-t-Y', strtotime('April 21, 2010'));

date() recherche la chaîne de caractères qui lui est donnée, comme 'm-t-Y' pour des symboles spécifiques, et il les remplace par les valeurs de son horodatage. Nous pouvons donc utiliser ces symboles pour extraire les valeurs et le formatage que nous voulons de l'horodatage. Dans les exemples ci-dessus :

  • Y vous donne l'année à 4 chiffres de l'horodatage ('2010')
  • m vous donne le mois numérique de l'horodatage, avec un zéro en tête ('04')
  • t vous donne le nombre de jours dans le mois de l'horodatage ('30')

Vous pouvez être créatif avec cela. Par exemple, pour obtenir la première et la dernière seconde d'un mois :

$timestamp    = strtotime('February 2012');
$first_second = date('m-01-Y 00:00:00', $timestamp);
$last_second  = date('m-t-Y 12:59:59', $timestamp); // A leap year!

Ver http://php.net/manual/en/function.date.php pour d'autres symboles et plus de détails.

3 votes

J'ajoute juste une info ici, j'ai eu un problème pour reconvertir la date en timestamp unix avec ce format, cela a été résolu en utilisant le format 'd-m-Y' plutôt que 'm-d-Y' aussi la dernière seconde sera '23:59:59' plutôt que '12:59:59' .

28voto

Un simple

  • Y - Une représentation numérique complète d'une année, 4 chiffres
  • m - Représentation numérique d'un mois, avec des zéros de tête
  • t - Nombre de jours dans le mois donné

Référence - http://www.php.net/manual/en/function.date.php

<?php
    echo 'First Date    = ' . date('Y-m-01') . '<br />';
    echo 'Last Date     = ' . date('Y-m-t')  . '<br />';
?>

0 votes

Ne fonctionne pas lorsque vous remplacez m par n'importe quel numéro de mois

20voto

Vikonaut Points 118

Vous pouvez utiliser la fonction date pour trouver le nombre de jours que compte un mois.

// Get the timestamp for the date/month in question.
$ts = strtotime('April 2010');

echo date('t', $ts); 
// Result: 30, therefore, April 30, 2010 is the last day of that month.

J'espère que cela vous aidera.

EDIT : Après avoir lu la réponse de Luis, je me suis dit que vous voudriez peut-être avoir le bon format (AA-mm-jj). C'est peut-être évident, mais ça ne fait pas de mal de le mentionner :

// After the above code
echo date('Y-m-t', $ts);

13voto

Luis Points 3692

Vous obtiendrez ainsi le dernier jour du mois :

function lastday($month = '', $year = '') {
   if (empty($month)) {
      $month = date('m');
   }
   if (empty($year)) {
      $year = date('Y');
   }
   $result = strtotime("{$year}-{$month}-01");
   $result = strtotime('-1 second', strtotime('+1 month', $result));
   return date('Y-m-d', $result);
}

Et le premier jour :

function firstDay($month = '', $year = '')
{
    if (empty($month)) {
      $month = date('m');
   }
   if (empty($year)) {
      $year = date('Y');
   }
   $result = strtotime("{$year}-{$month}-01");
   return date('Y-m-d', $result);
}

0 votes

Cette fonction a fonctionné pour moi. Elle a sauvé ma journée.

8voto

Jimil Choksi Points 21

Pour des mois y année utiliser date() en langage naturel comme suit

$first_date = date('d-m-Y',strtotime('first day of april 2010'));
$last_date = date('d-m-Y',strtotime('last day of april 2010'));
// Isn't it simple way?

mais pour le mois en cours

$first_date = date('d-m-Y',strtotime('first day of this month'));
$last_date = date('d-m-Y',strtotime('last day of this month'));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X