Euh, j'ai un problème, John Conde a répondu à la question à laquelle j'ai répondu, mais j'oublie de mentionner, qu'il doit fonctionner sur 5.2, donc j'utiliserai la réponse de Mr-sk ...
pihentagy
Réponses:
260
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 =newDateTime('first day of this month');
echo $d->format('jS, F Y');// First day of a specific month
$d =newDateTime('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 (newDateTime('first day of this month'))->format('jS, F Y');
echo (newDateTime('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
Notez que vous n'êtes pas obligé de passer ->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 ...
C'est IMO de loin le moyen le plus simple et le plus lisible de résoudre ce problème, si tout ce dont vous avez besoin est une représentation sous forme de chaîne de la date.
Markus Amalthea Magnuson
5
Le dernier jour du mois pourrait alors être saisi en utilisant date('Y-m-t');.
Mark Tomlin
7
FYI: La date «t» («Ym-t») représente toujours le nombre de jours dans ce même mois. Un moyen simple et efficace d'obtenir le dernier jour du mois en cours.
Pascal Klein
1
Si j'utilise ceci pour essayer d'obtenir le jour de la semaine, 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).
PBwebD
5
C'est tout simplement génial. Je l'ai développé un peu pour donner les limites min et max pour le temps du mois en faisant: $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK
32
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/>';
Ceci est une solution soignée, mais 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()).
Kalle H. Väravas
22
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');
C'est cool, mais j'ai quelques problèmes le premier jour du mois. Donc, si aujourd'hui c'est le 1er septembre, 11h. J'aurai le 1er août! J'ai besoin de vérifier si c'est le "1er" aujourd'hui et si c'est le cas, utilisez "maintenant". bizarre (Php 7.3.9)
Jacob Christensen
@JacobChristensen n'a pas encore vécu cela. Comment l'avez-vous résolu?
Nikola Petkanski
Très vrai, php ne semble pas être très cool à propos de ce premier et dernier. $ n = new \ DateTime ('premier jour de'. (new \ DateTime ()) -> format ('F')); "premier jour de janvier". Même chose pour la semaine où c'est lundi et c'est un peu ... frustrant :)
Jacob Christensen le
20
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"));
hors du sujet mais comment calculeriez-vous le dernier jour du mois dans le même scénario.
LoneWOLFs
@LoneWOLFs last day of {$month} {$year}ou les last day of this monthdeux 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');.
Mark Tomlin
3
Vous pouvez le faire comme ceci:
$firstday = date_create()->modify('first day January 2010');
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 stopif($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:
(newTheFirstDayOfThisMonth(newNow()))->value();
Pour plus d'informations sur cette approche, consultez cette entrée .
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:
En PHP 5.4+, vous pouvez faire ceci:
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()
:la source
->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:
Dernier jour du mois:
la source
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:
la source
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 corrigestrtotime('first day of this month 00:00:00', time())
.J'utilise actuellement cette solution:
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:
la source
J'utilise une façon folle de faire cela en utilisant cette commande
C'est tout
la source
En php 5.2, vous pouvez utiliser:
la source
Moche, (et n'utilise pas votre appel de méthode ci-dessus) mais fonctionne:
la source
last day of {$month} {$year}
ou leslast 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 utiliserdate('Y-m-t');
.Vous pouvez le faire comme ceci:
la source
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.
la source
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
la source
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:
Pour plus d'informations sur cette approche, consultez cette entrée .
la source