问题描述
我有些困惑,因为我有一些代码可以提前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()函数以秒为单位的时间作为第二个参数。