1

我可以使用 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);
4

3 回答 3

5

不幸的是,您想要做的事情目前无法strtotime()在 PHP 中使用。以下是如何在一行中实现你想要的,使用mktime()and date()

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

上面的代码将找到上个月第21天的时间戳。随便换个21就行。

这有效,因为:

小于 1 的值(包括负值)倒序引用上一年的月份,所以 0 是 12 月,-1 是 11 月,依此类推。[PHP 文档]

因此,如果月份是1(一月),您将使用月份值运行mktime()0这意味着“上一年的十二月”。

于 2012-04-06T00:38:32.367 回答
1

试试这个。

mktime()

http://uk3.php.net/manual/en/function.mktime.php

于 2012-04-05T13:55:31.000 回答
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("m")从 1 到 12,那么该代码应该是:

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

不要优化

再想一想,我不会费心尝试进一步优化它。请记住,过早的优化是万恶之源。如果您的代码有效并且相对较短(就是这种情况),那么最好保持这种状态。想想即使有一个函数可以做你想做的事,唯一的区别是你不必自己编写代码,但后台进程会非常相似,所以没有太多需要优化的地方(关于速度/资源)。

评论你的代码

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

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

可能的解决方案

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

<?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

于 2012-04-05T15:48:31.323 回答