使用date_modify作为DateTime对象的当前月份的第一天

时间:2010-01-19 15:53:57

标签: php date datetime

我可以在本周一获得:

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

我想在本月1日轻松获得。我怎样才能做到这一点?

12 个答案:

答案 0 :(得分:292)

这是我使用的。

每月的第一天:

date('Y-m-01');

本月最后一天:

date('Y-m-t');

答案 1 :(得分:222)

需要PHP 5.3才能工作(PHP 5.3中引入了“第一天”)。否则上面的例子是唯一的方法:

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

在PHP 5.4+中你可以这样做:

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

如果您希望以简洁的方式执行此操作,并且已经有数值的年份和月份,则可以使用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

答案 2 :(得分:29)

这就是你需要的一切:

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

答案 3 :(得分:19)

目前我正在使用此解决方案:

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

我遇到的唯一问题是正在设定奇怪的时间。我的搜索界面需要正确的范围,我最终得到了这个:

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

答案 4 :(得分:16)

我使用一种疯狂的方法来执行此操作是使用此命令

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

多数人

答案 5 :(得分:5)

在php 5.2中你可以使用:

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

答案 6 :(得分:3)

丑陋,(并且不使用上面的方法调用)但是有效:

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

答案 7 :(得分:2)

你可以这样做:

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

答案 8 :(得分:0)

使用日期方法,我们应该能够得到结果。 即;日期(&#39; N / D / l&#39;,mktime(0,0,0,月,日,年));

例如

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

答案 9 :(得分:0)

我将其与日常计划工作一起使用,以检查是否应在给定月份的第一天向我的会员发送电子邮件。比其他答案多了几行,但坚如磐石。

$(function(){
  function sumSection(){
    return $(".container").height()
  }
  function setDimensionBar(){
    $(".bar").css({
      "height": ($(window).height()/sumSection())*100 + "%"
    })
  }
  function setSection(){
        $.each($("section"), function(i, element){
      $(element).css({
        "min-height": $(window).height()
      })
      })
  }

  function addBehaviours(){
    let sections = $("section")
    $.each($(".node"), function(i, element){
      $(element).on("click", function(e){
        e.preventDefault()
        let scroll = $(sections[i]).offset().top
        $('html, body').animate({
          scrollTop: scroll
        }, 500);
      })
    })
  }

  function arrangeNodes(){
    $(".node").remove()
    $.each($("section"), function(i, element){
      let name = $(element).data("name")
      let node = $("<li class='node'><span>"+name+"</span></li>")
      $(".timeline").append(node)

      $(node).css({
        "top": ($(".timeline").height()/$(document).height()) * $(element).offset().top
      })
    })
    addBehaviours()
  }

  $(window).on("scroll", function(){
    let top = (window.scrollY/sumSection())*100
    $(".bar").css({
        "top": top + "%"
      })

  })

  $(window).on("resize", function(){
    setSection()
    arrangeNodes()
    setDimensionBar()
  })

  setTimeout(
    function(){
      setSection()
      arrangeNodes()
      setDimensionBar()      
    },
    200
  )
})

答案 10 :(得分:0)

本着YourEnum enumVal = decode(YourEnum.class, ordinal) 的精神,所有那些特殊的php表达式都很棒,尽管它们一遍又一遍。

因此,我决定构建一些基本的日期时间抽象和大量的特定实现,这些抽象可以由任何IDE自动完成。关键是要找到什么类型的东西。像first day of ...todaynow等。我列出的所有内容都是日期时间。因此,有一个名为the first day of a previous month的接口或抽象类,以及实现它的特定日期时间。

您特定情况下的代码如下:

ISO8601DateTime

有关此方法的更多信息,请查看this entry

答案 11 :(得分:0)

本月开始和当月最后一秒的时间戳。 您可以添加 00:00:00 或仅引用“今天”

替代方案:

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