以自定义格式获取阵列中最近7天的日期

Dzh*_*eyt 2 php datetime

如何以自定义格式(dd/mm)获取过去7天(包括今天)的确切日期?

在结果数组中,我希望得到类似的结果(日期只是示例):

1=>11/2 (today minus 7 days)
2=>12/2 (today minus 6 days)
...
7=>17/2 (today)
Run Code Online (Sandbox Code Playgroud)

Dzh*_*eyt 12

function getLastNDays($days, $format = 'd/m'){
    $m = date("m"); $de= date("d"); $y= date("Y");
    $dateArray = array();
    for($i=0; $i<=$days-1; $i++){
        $dateArray[] = '"' . date($format, mktime(0,0,0,$m,($de-$i),$y)) . '"'; 
    }
    return array_reverse($dateArray);
}
Run Code Online (Sandbox Code Playgroud)

用法:

$arr = getLastNDays(7);
Run Code Online (Sandbox Code Playgroud)

要么

$arr = getLastNDays(7, 'd/m/Y');
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以组合2个函数date()和strtotime().例如:

echo date("Y-m-d", strtotime("7 days ago"));
Run Code Online (Sandbox Code Playgroud)

尝试:

for ($i=0; $i<7; $i++)
{
    echo date("d/m", strtotime($i." days ago")).'<br />';
}
Run Code Online (Sandbox Code Playgroud)

您应该能够找到如何以正确的顺序获取它们并进入数组:)

希望有所帮助


sce*_*sor 5

time()为您提供当前时间戳。
86400秒是一天 (60 * 60 * 24)。
date()为您提供自定义日期字符串。

for ($iDay = 6; $iDay >= 0; $iDay--) {
    $aDays[7 - $iDay] = date('d/m', time() - $iDay * 86400);
}
Run Code Online (Sandbox Code Playgroud)

另请参阅此示例

如果您不想要前导零,请'j/n'用作自定义日期格式参数

for ($iDay = 6; $iDay >= 0; $iDay--) {
    $aDays[7 - $iDay] = date('j/n', time() - $iDay * 86400);
}
Run Code Online (Sandbox Code Playgroud)

另请参阅此更新示例

=== 更新 ===

@Dagon 使用strtotime()获取时间戳的想法很棒。这是更好的解决方案:

for ($iDay = 6; $iDay >= 0; $iDay--) {
    $aDays[7 - $iDay] = date('j/n', strtotime("-" . $iDay . " day"));
}
Run Code Online (Sandbox Code Playgroud)

一个例子