如何用PHP根据所选年月获取当月所有日期及星期名称
解决方案
首先需要调整你的表单,给月份选择器的每个选项加上对应的数字value,这样PHP能直接获取到月份编号,避免额外处理土耳其语名称的映射:
<form method="post" action="action_page.php"> <select name="month"> <option value="1">Ocak</option> <option value="2">Şubat</option> <option value="3">Mart</option> <option value="4">Nisan</option> <option value="5">Mayıs</option> <option value="6">Haziran</option> <option value="7">Temmuz</option> <!-- 原表单遗漏的7月,已补充 --> <option value="8">Ağustos</option> <option value="9">Eylül</option> <option value="10">Ekim</option> <option value="11">Kasım</option> <option value="12">Aralık</option> </select> <select name="year"> <option>2000</option> <option>2001</option> <option>2002</option> <option>2003</option> <option>2004</option> <option>2005</option> <option>2006</option> <option>2007</option> <option>2008</option> <option>2009</option> <option>2010</option> <!-- 原表单遗漏的2010年,已补充 --> <option>2011</option> <option>2012</option> <option>2013</option> <option>2014</option> <option>2015</option> <option>2016</option> <option>2017</option> <option>2018</option> <option>2019</option> <option>2020</option> <option>2021</option> <option>2022</option> </select> <input type="submit" name="submit"> </form>
然后在action_page.php中编写PHP代码,处理表单提交并生成当月的日期和对应星期:
<?php // 检查表单是否提交 if (isset($_POST['submit']) && isset($_POST['month'], $_POST['year'])) { // 获取并过滤输入为整数 $month = (int)$_POST['month']; $year = (int)$_POST['year']; // 验证输入有效性 if ($month < 1 || $month > 12 || $year < 2000 || $year > 2022) { echo "请选择有效的年月"; exit; } // 设置土耳其语本地化,确保星期名称为土耳其语 setlocale(LC_TIME, 'tr_TR.utf8'); // 若服务器不支持tr_TR,可尝试备选:setlocale(LC_TIME, 'turkish'); // 生成当月第一天的DateTime对象 $firstDay = new DateTime("$year-$month-01"); // 获取当月最后一天 $lastDay = (clone $firstDay)->modify('last day of this month'); // 输出标题 echo "<h3>{$firstDay->format('F Y')} 的日期和星期</h3>"; echo "<ul>"; // 循环遍历当月每一天 while ($firstDay <= $lastDay) { $date = $firstDay->format('d.m.Y'); // 格式化为日.月.年 $weekday = strftime('%A', $firstDay->getTimestamp()); // 获取土耳其语完整星期名 echo "<li>$date - $weekday</li>"; // 日期加一天 $firstDay->modify('+1 day'); } echo "</ul>"; } else { echo "请选择年月并提交表单"; } ?>
补充说明
如果服务器不支持setlocale,可以用IntlDateFormatter替代获取土耳其语星期名:
$formatter = new IntlDateFormatter( 'tr_TR', IntlDateFormatter::FULL, IntlDateFormatter::NONE ); $weekday = $formatter->format($firstDay);
内容的提问来源于stack exchange,提问作者Gizem Y
相关产品推荐
相关产品推荐

