Je peux recevoir le lundi de cette semaine avec:
$monday = date_create()->modify('this Monday');
J'aimerais obtenir avec la même facilité le 1er de ce mois. Comment puis-je y parvenir?
Je peux recevoir le lundi de cette semaine avec:
$monday = date_create()->modify('this Monday');
J'aimerais obtenir avec la même facilité le 1er de ce mois. Comment puis-je y parvenir?
Réponses:
Nécessite PHP 5.3 pour fonctionner ("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');
En 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 une manière concise de le faire 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
->modify()
si vous voulez juste le premier jour du mois en cours . Vous pouvez passer 'first day of this month'
au constructeur DateTime directement comme: $date = new DateTime('first day of this month')
. Juste en disant ...
Voici ce que j'utilise.
Premier jour du mois:
date('Y-m-01');
Dernier jour du mois:
date('Y-m-t');
date('Y-m-t');
.
date('w', '2015-05-01');
je me retrouve avec la veille au lieu du jour réel. (Cela me donnerait 4 au lieu des 5 corrects).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Voici 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/>';
strtotime('first day of this month', time())
reviendra le premier jour, et l'heure est la même que celle actuelle. Donc là pour, ce n'est pas le premier jour à 0h00, son premier jour et comme l'heure est maintenant. Cela le corrige strtotime('first day of this month 00:00:00', time())
.
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 que je suis tombé sur est que le temps étrange est fixé. 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');
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
Moche, (et n'utilise pas votre 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')))));
last day of {$month} {$year}
ou les last day of this month
deux fonctionnent. Mais gardez à l'esprit que $ month devrait être une chaîne contenant le nom du mois comme «janvier», pensé à «décembre». Ou vous pouvez simplement utiliser date('Y-m-t');
.
Je l'utilise avec un travail cron quotidien pour vérifier si je dois envoyer un e-mail le premier jour d'un mois donné à mes affiliés. C'est quelques lignes de plus 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;
}
en utilisant la méthode de la date, nous devrions être en mesure d'obtenir le résultat. c'est à dire; 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
Toutes ces expressions php spéciales, dans l'esprit de first day of ...
sont géniales, même si elles me sortent de la tête à maintes reprises.
J'ai donc décidé de créer quelques abstractions de base de datetime et des tonnes d'implémentations spécifiques qui sont automatiquement complétées par n'importe quel IDE. Le but est de trouver quel genre de choses. Comme, today
, now
, the first day of a previous month
, etc. Toutes ces choses que j'ai énumérés sont datetimes. Par conséquent, il existe une interface ou une classe abstraite appeléeISO8601DateTime
, et des datetimes spécifiques qui l'implémentent.
Le code dans votre cas particulier ressemble à ça:
(new TheFirstDayOfThisMonth(new Now()))->value();
Pour plus d'informations sur cette approche, consultez cette entrée .