下拉菜单中的PHP格式日期不起作用

问题描述

我有些困惑,因为我有一些代码可以提前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('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个时间戳。

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

我将每个选项的值都设置为该时间戳记,因为如果您需要处理任何POST数据,它将使所有操作变得更加容易。但是您可以根据需要随意调整格式。

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

编辑:

只是为了好玩,here's how you can do it多了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()函数以秒为单位的时间作为第二个参数。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...