我怎样才能找到约会前一天的日期?

JD *_*cks 4 php php4

我有一个系统将财政年度与当前日期比较到前一年的同一日期范围.您可以调整要查看的年份和月份,并始终将相同的日期范围与之前的年份进行比较.我知道如果当天是闰日,它与去年的第28天相比,如果去年是闰年,今天是2月28日,则与去年相比,直到29日.如果您查看当月以外的其他月份,则会显示该月的最后一天,否则截至当前日期.

好的,现在工作正常,但现在我的雇主不希望它达到他们希望它达到昨天日期的当前日期.我怎么能这样做,我主要担心的是,如果今天是本月的第一天,或者今天是财政年度的第一天怎么办?

这是我现在的代码:

function create_YTD_XML()
{
    global $month;
    global $year;

    $last_year = $year - 1;

    if($year == date('Y') && $month == date('m'))
    {
        $this_day = date('d');
    }
    else
    {
        $this_day = date('t', mktime(0, 0, 0, $month, 1, $year)); // LAST DAY OF MONTH
    }

    if(is_leap_year($year) && $this_day == 29)
    {
        $last_day = 28;
    }
    else if(is_leap_year($last_year) && $this_day == 28)
    {
        $last_day = 29;
    }
    else
    {
        $last_day = $this_day;
    }

    if($month >= 2)
    {
        $this_year_start = $year;
        $last_year_start = $last_year;
    }
    else
    {
        $this_year_start = $year - 1;
        $last_year_start = $last_year - 1;
    }

    $this_ytd_start = $this_year_start.'-02-01';
    $last_ytd_start = $last_year_start.'-02-01';

    $this_ytd_end = $year.'-'.str_pad($month, 2, "0", STR_PAD_LEFT).'-'.$this_day;
    $last_ytd_end = $last_year.'-'.str_pad($month, 2, "0", STR_PAD_LEFT).'-'.$last_day;


}
Run Code Online (Sandbox Code Playgroud)

什么是最好的解决方案?

谢谢!

Seb*_*Seb 25

strtotime()会做到这一点.使用mktime()将您之前的日期转换为Unix时间戳,然后像这样使用它:

$from_unix_time = mktime(0, 0, 0, $month, $day, $year);
$day_before = strtotime("yesterday", $from_unix_time);
$formatted = date('Y-m-d', $day_before);
Run Code Online (Sandbox Code Playgroud)


Peo*_*eon 21

你也可以使用这样的单词来使用strtotime函数:

$date = '2012-11-08';
$day_before = date( 'Y-m-d', strtotime( $date . ' -1 day' ) );
Run Code Online (Sandbox Code Playgroud)

输出$day_before:

2012-11-07
Run Code Online (Sandbox Code Playgroud)

  • 我发现这个比其他解决方案更直观。 (2认同)

Ily*_*man 6

你可以依靠mktime()处理"不正确"值的能力.我们假设$ year,$ month和$ day是当天.

$yesterday = mktime (0, 0, 0, $month, $day - 1, $year);
echo date ('Y-m-d', $yesterday);
Run Code Online (Sandbox Code Playgroud)

别担心,它会做正确的事情:尝试不同的价值观.