PHP获取上个月特定日期的时间戳

时间:2012-04-05 13:53:33

标签: php

我可以使用strtotime()来获取上个月某一天的时间戳,如果不是,最有效的方法是什么?

这就是我想要的东西

strtotime("5 last Month");

而不是

$time_day= 5;
$time_month= date("m");
$time_year= date("Y");

if($time_month<1){
$time_month=12;
$time_year--;
}else{
$time_month--;
}

$date=mktime(0,0,0,$time_month,$time_day,$time_year);

3 个答案:

答案 0 :(得分:6)

在PHP中使用strtotime()目前无法实现您想要做的事情。以下是如何使用mktime()date()在一行中实现您想要的内容:

$timestamp = mktime(0, 0, 0, date('n') - 1, 21);

上面的代码会找到上个月第21天日的时间戳。只需交换21即可。

这是因为:

  

小于1的值(包括负值)以相反的顺序引用上一年的月份,因此0表示12月,-1表示11月,等等。[PHP Documentation]

因此,如果月份为1(1月),那么您将使用mktime()作为月份值运行0,这意味着“上一年的12月”。

答案 1 :(得分:1)

答案 2 :(得分:0)

错误

首先,我需要纠正一个小错误:

if($time_month<1)    // If month==0
    {
    $time_month=12;    // New month==12
    $time_year--;
    }

这样,有13个月......(0,1,2,3,4,5,6,7,8,9,10,11,12)。 Date指定date("m")从1到12,然后该代码应为:

if($time_month==1)    // If month==1
    {
    $time_month=12;    // New month==12
    $time_year--;
    }

不优化

还有第二个想法,我不打算再尝试优化它。请记住premature optimization is the root of all evil。如果您的代码有效并且相对较短(在这种情况下),最好的方法就是保持这种方式。认为即使有一个功能可以做你想做的事情,唯一的区别是你不必自己编写代码,但后台进程会非常相似所以没有那么多优化(关于速度/资源)。

评论您的代码

另外,我建议写一两行评论,说明它的作用。如果您想在一年左右的时间内重复使用它,那么理解代码会很有用。

最后一个想法。不同的月份有不同的日子。我不确定您的代码是用于手动输入还是取决于当天,但如果您编写day="31";并且date("m")是03,会发生什么?

可能的解决方案

看看这个:Link。它以这种方式工作:

<?php
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P10D'));    // 10 days ago
echo $date->format('Y-m-d') . "\n";
?>

将输出2000-01-10