web-dev-qa-db-fra.com

Le premier jour du mois en cours dans php en utilisant date_modify comme objet DateTime

Je peux avoir lundi cette semaine avec:

$monday = date_create()->modify('this Monday');

Je voudrais avoir avec la même facilité le 1er de ce mois. Comment puis-je y arriver?

Merci

128
pihentagy

Requiert le fonctionnement de PHP 5.3 ("premier jour de" est introduit dans PHP 5.3). Sinon, l'exemple ci-dessus est le seul moyen de le faire:

<?php
    // First day of this month
    $d = new DateTime('first day of this month');
    echo $d->format('jS, F Y');

    // First day of a specific month
    $d = new DateTime('2010-01-19');
    $d->modify('first day of this month');
    echo $d->format('jS, F Y');

    // alternatively...
    echo date_create('2010-01-19')
      ->modify('first day of this month')
      ->format('jS, F Y');

Dans PHP 5.4+, vous pouvez faire ceci:

<?php
    // First day of this month
    echo (new DateTime('first day of this month'))->format('jS, F Y');

    echo (new DateTime('2010-01-19'))
      ->modify('first day of this month')
      ->format('jS, F Y');

Si vous préférez un moyen concis de procéder ainsi et que vous avez déjà l'année et le mois en valeurs numériques, vous pouvez utiliser date():

<?php
    echo date('Y-m-01'); // first day of this month
    echo date("$year-$month-01"); // first day of a month chosen by you
215
John Conde

Voici ce que j'utilise.

Premier jour du mois:

date('Y-m-01');

Dernier jour du mois:

date('Y-m-t');
286
Etienne Dupuis

C'est tout ce dont vous avez besoin:

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
27
kaleazy

J'utilise actuellement cette solution:

$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');

Le seul problème sur lequel je suis tombé, c’est qu’un temps étrange se prépare. J'avais besoin d'une plage correcte pour notre interface de recherche et je me suis retrouvé avec ceci:

$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
17
Nikola Petkanski

J'utilise une façon folle de faire cela en utilisant cette commande

$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));

C'est tout

En PHP 5.2, vous pouvez utiliser:

<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>
5
pihentagy

Moche (et n'utilise pas l'appel de méthode ci-dessus) mais fonctionne:

echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));   
3
mr-sk

Vous pouvez le faire comme ça:

$firstday = date_create()->modify('first day January 2010');
2
Thomas

J'utilise ceci avec un travail quotidien cron pour vérifier si je devrais envoyer un courrier électronique le premier jour d'un mois donné à mes affiliés. C'est un peu plus de lignes que les autres réponses mais solide comme un roc.

//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];

//if it's not the first day then stop
if($day != "01") {

     echo "error - it's not the first of the month today";
     exit;

}
0
Craig Edmonds

en utilisant la méthode de la date, nous devrions pouvoir obtenir le résultat . date ('N/D/l', mktime (0, 0, 0, mois, jour, année));

Par exemple

echo date('N', mktime(0, 0, 0, 7, 1, 2017));   // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017));   // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017));   // will return Saturday
0
Jacob Nelson