PHP如何保留原字符串值,获取所选年份2月最后一个周六?
解决PHP中保留原始日期值并计算指定年份2月最后一个周六的问题
你的核心问题是复用了同一个变量$valdatum——既用来存储用户输入的原始日期字符串,又用来存储DateTime对象,导致原始值被覆盖。只需要用新变量处理日期计算,同时基于用户选择的年份来计算目标日期即可。
修改后的代码如下:
<?php // 初始化默认值,匹配input type="date"的返回格式(Y-m-d) $valdatum = date("Y-m-d"); if(isset($_POST["valdatum"])) { $valdatum = filter_input(INPUT_POST, 'valdatum', FILTER_SANITIZE_SPECIAL_CHARS); } ?> <!DOCTYPE html> <html lang="sv"> <head> <title>Tjejvasan</title> <meta charset="utf-8"> </head> <body> <form method="POST"> <input type="date" name="valdatum" value="<?= $valdatum;?>"> <input type="submit" value="Skicka"> </form> <?php // 输出用户选择的原始日期值 echo "你选择的日期:" . $valdatum; echo "<br>"; // 从原始日期中提取年份,确保计算的是所选年份的2月 $selectedYear = date('Y', strtotime($valdatum)); // 使用新变量存储DateTime对象,避免覆盖原始值 $targetDate = new DateTime("$selectedYear-02-01"); $targetDate->modify('last saturday of february'); $lastSaturday = $targetDate->format('Y-m-d'); echo "该年份2月最后一个周六:" . $lastSaturday; ?> </body> </html>
关键改动说明:
- 初始化
$valdatum时使用Y-m-d格式,和input控件的返回格式一致,避免格式不匹配 - 创建新变量
$targetDate处理日期计算,彻底避免覆盖原始的用户输入值 - 从用户选择的日期中提取年份,确保计算的是用户所选年份的2月最后一个周六(而非默认当前年份)
内容的提问来源于stack exchange,提问作者Tas
相关产品推荐
相关产品推荐

