PHP 在下拉列表中格式化日期无效

PHP format date in a dropdown not working

我有点难过,因为我有一些代码可以提前 21 天生成一个简单的日期下拉菜单。

它工作正常,但输出显示的日期不正确,而是 1970 年 1 月 1 日

$timestamp = strtotime('today');
$output = [];
for ($day = 0; $day < 21; $day++) {
    $output[] = date('d M y', strtotime(sprintf('+%d days', $day), $timestamp));
}
echo "<select name='days'>";
    foreach ($output as $day)
    {
        echo "<option value='".$day."'>".date('l jS \of F Y',$day)."</option>";
    }
echo "</select>";

如果我只回显 $day 作为它以 DD/MM/YYYY 格式显示的输出值,但我希望它显示 Day Name Date of Month Year

所以使用

有什么不正确的
date('l jS \of F Y',$day)

我确定它有些愚蠢,但我检查了所有日期周围的各种帖子,但我无法解决这个问题。

如果您查看 PHP:date 文档,您会发现第二个参数需要一个整数,而不是一个字符串。

将您的代码更改为以下内容:

<?php

$output = [];
for ($day = 0; $day < 21; $day++) {
    $output[] = strtotime(sprintf('+%d days', $day));
}
echo "<select name='days'>";
foreach ($output as $day)
{
    echo "<option value='".$day."'>".date('l jS \of F Y', $day)."</option>";
}
echo "</select>";

您会在这里看到我们没有用字符串填充输出数组,而是用 21 个时间戳填充它。

一旦开始遍历输出数组,将时间戳传递给日期函数的第二个参数将产生您期望的输出。

我将每个选项的值都设置为该时间戳,因为如果您需要处理任何 POST 数据,它会使一切更容易处理。但您可以根据需要随意调整格式。

Here's a working example that you can play around with.

编辑:

纯属娱乐,here's how you can do it in a more object-oriented style。我觉得这种方式更简洁一些,但是否采用这种方式取决于你。

<?php

$today = new DateTime();
echo "<select name='days'>";
for ($day = 0; $day < 21; $day++)
{
    echo "<option value='".$today->getTimestamp()."'>".$today->format('l jS \of F Y')."</option>";
    $today->add(new DateInterval("P1D"));
}
echo "</select>";

函数 date() 以秒为单位的时间作为它的第二个参数。