我设置了三个变量$date_legible
(格式为F jS, Y
,即2011年1月1日),$date_timestamp
(不言自明)和$date_normal
(格式为YYYY-MM-DD)
我有三个选择字段:
<select name="date_mo">
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<select name="date_dy">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="date_yr">
<?php for($year=$curryear;$year<$curryear+51;$year++){ ?>
<option value="<?php echo $year; ?>"><?php echo $year; ?></option>
<?php } ?>
</select>
我知道我想转换时间戳,但我最终需要分析$month
,$day
和$year
的输出。问题是我不知道如何检查值的选择并自动选择正确的选项。
有人可以帮忙吗?谢谢!
更新
我现在还有一个变量,因为我让用户从前端提交,而Gravity Forms则提交为YYYY-MM-DD
。
在深入研究已发布的解决方案之前(顺便说一句,谢谢你们[和gals]),这里有更多信息:
我正在运行WordPress并有三个自定义字段,如上所述。当用户从前端提交帖子时,唯一填写的自定义字段为$date_normal
。这没关系,因为帖子必须从后端审核(即发布)。我现在需要的是在加载时设置YYYY-MM-DD
以设置select
上的选项。我不是要求你们改变你的答案,我相信我能弄明白(尽管如果你能帮助解决这个新问题,我们将不胜感激)。
答案 0 :(得分:4)
如果我理解你的问题,你有一个时间戳,你需要使用时间戳来在渲染页面时选择适当的选择选项。
作为预警 - 这将使选择无效日期成为可能,例如2月31日(不存在)。您可能需要考虑在使用javascript更改月份时重新绘制年份下拉列表。由于你没有指定任何javascript库(并且不清楚无效日期的可能性有多重要),我不会冒险展示代码,但这并不是非常困难。
// using the current time for the sake of the example, your timestamp would take the place of this
$timestamp = time();
// determine the selected month, day, and year
$selected_month = date('n', $timestamp);
$selected_day = date('j', $timestamp);
$selected_year = date('Y', $timestamp);
// now, create the drop-down for months
$month_html = '<select name="date_mo">';
for ($x = 1; $x < 13; $x++) {
$month_html .= '<option value='.$x.($selected_month == $x ? ' selected=true' : '' ).'>'.date("F", mktime(0, 0, 0, $x, 1, $selected_year)).'</option>';
}
$month_html .= '</select>';
// output
print $month_html;
// create the day drop-down
$day_html = '<select name="date_day">';
for ($x = 1; $x < 32; $x++) {
$day_html .= '<option value='.$x.($selected_day == $x ? ' selected=true' : '' ).'>'.$x.'</option>';
}
$day_html .= '</select>';
// output
print $day_html;
// create the year drop-down
$year_html = '<select name="date_year">';
$start_year = date('Y', time());
$max_year = $start_year + 51;
for ($x = $start_year; $x < $max_year; $x++) {
$year_html .= '<option value='.$x.($selected_year == $x ? ' selected=true' : '' ).'>'.$x.'</option>';
}
$year_html .= '</select>';
// output
print $year_html;
输出:
修改强>
如果您的源数据格式为YYYY-MM-DD
。为了将其转换为时间戳,并因此使用我发布的示例代码,就是在该格式化的日期值上调用strtotime
。因此,上面代码中唯一需要更改的行是$timestamp = strtotime($the_formatted_date);
答案 1 :(得分:2)
<?php
// $months = array(1 => 'January', 2 => 'February', ... etc
?>
<select name="date_mo">
<? for ($i = 1, $current = (int) date('n'); $i <= 12; $i++) { ?>
<option value="<?=$i;?>"<?=($current === $i ? ' selected="selected"' : NULL);?>><?=$months[$i];?></option>
<? } ?>
</select>
<select name="date_dy">
<? for ($i = 1, $current = (int) date('j'); $i <= 31; $i++) { ?>
<option value="<?=$i;?>"<?=($current === $i ? ' selected="selected"' : NULL);?>><?=$i;?></option>
<? } ?>
<select name="date_yr">
<? for ($i = $current = (int) date('Y'), $until = $i + 50; $i <= $until; $i++) { ?>
<option value="<?=$i;?>"<?=($current === $i ? ' selected="selected"' : NULL);?>><?=$i;?></option>
<? } ?>
</select>
答案 2 :(得分:1)
我个人会将3个字段转换为更加用户友好的日期选择器(例如使用jQuery UI),但是要在打开页面时选择正确的选项,您需要为每个字段添加一个检查选项。
年度示例:
<?php
$selected_year = date("Y", $date_timestamp); // get the selected year
for($year=$curryear;$year<$curryear+51;$year++)
{
?>
<option value="<?php echo $year; ?>" <?php echo ($selected_year == $year) ? 'selected' : ''; ?>><?php echo $year; ?></option>
<?php
}
?>