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

时间:2009-04-23 14:16:05

标签: 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;


}

什么是最好的解决方案?

谢谢!

9 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:20)

你也可以使用单词来使用strtotime功能:

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

$day_before的输出:

2012-11-07

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:3)

注意:以下答案不考虑夏令时;在一年中的某些时间,它将返回不准确的结果。有关详细信息,请参阅注释。


由于一天的长度是常数(86,400秒),您可以使用算术来确定给定日期之前一天的时间戳:

$yesterday = date('Y-m-d', strtotime($current_date) - 86400);

$current_date是您想要在前一天找到的日期。如果它已经是unix timestamp,您可以完全取消strtotime()

$yesterday = date('Y-m-d', $current_date_as_unix_timestamp - 86400);

答案 4 :(得分:2)

$date = date('Y-m-d',strtotime('yesterday'));

答案 5 :(得分:2)

我确实会以这种方式使用strtotime:

$date="2014-02-20";
echo date("Y-m-d",strtotime($date." -1 day"));

将输出:

2014-02-19

答案 6 :(得分:0)

我认为这取决于您的雇主想要的行为。没有“正确”的答案 - 如果今天是一个财政年度的开始,他们是否希望看到最近两个财政年度的比较(如果您将昨天用作“最多”日期会发生什么情况)或他们是否想要看到本财政年度的第1天与去年的第1天相比?您需要坐下来找出潜在的边缘案例,然后与您的雇主讨论他们想要什么。

答案 7 :(得分:0)

您还可以使用以下代码:

$current_date = strtotime('25-11-2012');
echo $yesterday = date('Y-m-d', strtotime('-1 day', $current_date));

代码输出如下:

2012-11-24

答案 8 :(得分:0)

在07:59:59固定的时间前一天

$demo = date("Y-m-d H:i:s", mktime(7, 59, 59, date("m"),date("d")-1,date("Y")));