pihentagy
pihentagy

Reputation: 6285

The first day of the current month in php using date_modify as DateTime object

I can get the Monday of this week with:

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

I would like to get with the same ease the 1st of this month. How can I achieve that?

Upvotes: 189

Views: 377778

Answers (13)

Simon Epskamp
Simon Epskamp

Reputation: 9966

If you're using composer, you can install carbon: composer require nesbot/carbon

This is then as simple as:

use Carbon/Carbon;

$startOfMonth = Carbon::now()->startOfMonth()->toDateTime();

Upvotes: 1

Watts Epherson
Watts Epherson

Reputation: 783

I am providing this answer as an alternative one liner if the DateTime object is not preferred

Basically, I get the current day number, reduce it by one then take that number of days from itself ("today" which automatically resets the clock to 00:00:00 too) and you get the start of the month.

$startOfMonth = strtotime("today - ".(date("j")-1)." days");

Upvotes: 0

John Conde
John Conde

Reputation: 219804

Requires PHP 5.3 to work ("first day of" is introduced in PHP 5.3). Otherwise the example above is the only way to do it:

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

In PHP 5.4+ you can do this:

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

If you prefer a concise way to do this, and already have the year and month in numerical values, you can use date():

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

Upvotes: 334

Watts Epherson
Watts Epherson

Reputation: 783

Timestamp for start of this month and very last second of current month. You can add 00:00:00 or just reference "today"

Alternative:

$startOfThisMonth = strtotime("first day of this month",strtotime("today"));
OR
$startOfThisMonth = strtotime("first day of this month 00:00:00");

$endOfThisMonth = strtotime("first day of next month",$startOfThisMonth)-1;

Upvotes: 2

Craig Edmonds
Craig Edmonds

Reputation: 2262

I use this with a daily cron job to check if I should send an email on the first day of any given month to my affiliates. It's a few more lines than the other answers but solid as a rock.

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

}

Upvotes: 3

Jacob Nelson
Jacob Nelson

Reputation: 2466

using date method, we should be able to get the result. ie; date('N/D/l', mktime(0, 0, 0, month, day, year));

For Example

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

Upvotes: 3

I use a crazy way to do this is using this command

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

Thats all

Upvotes: 24

Etienne Dupuis
Etienne Dupuis

Reputation: 13786

Here is what I use.

First day of the month:

date('Y-m-01');

Last day of the month:

date('Y-m-t');

Upvotes: 419

kaleazy
kaleazy

Reputation: 6232

This is everything you need:

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

Upvotes: 40

Nikola Petkanski
Nikola Petkanski

Reputation: 4794

Currently I'm using this solution:

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

The only issue I came upon is that strange time is being set. I needed correct range for our search interface and I ended up with this:

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

Upvotes: 25

pihentagy
pihentagy

Reputation: 6285

In php 5.2 you can use:

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

Upvotes: 8

Thomas M&#252;ller
Thomas M&#252;ller

Reputation: 1433

You can do it like this:

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

Upvotes: 3

mr-sk
mr-sk

Reputation: 13397

Ugly, (and doesn't use your method call above) but works:

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

Upvotes: 4

Related Questions