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() 以秒为单位的时间作为它的第二个参数。
我有点难过,因为我有一些代码可以提前 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() 以秒为单位的时间作为它的第二个参数。