论坛日期 基于 if 语句匹配 1 of 12 的响应等于或大于比较(参数)
Posted
技术标签:
【中文标题】论坛日期 基于 if 语句匹配 1 of 12 的响应等于或大于比较(参数)【英文标题】:Forum date Response based on if statement matches 1 of 12 equal to or greater than comparisons (arguements) 【发布时间】:2022-01-23 19:48:58 【问题描述】:好的,所以我正在处理一个论坛提交 php 代码,让我们调用文件名 index.html,它在下面的代码中首先提交论坛日期。
<center>
<form name="birthDay" method="post" action="months.php">
<input type="date" id="birthDay" name="birthDay"><br>
<input type="submit" name="Submit" value="send"><br>
</form>
</center>
php 文件 months.php 将采用变量生日并将其提交到月份 php 文件。像这样。
<?php
if(isset($_POST['birthDay']))
$link = $_POST['birthDay']; //Month for Jan
$janBegin = date("01-01");
$janEnd = date("01-31");
if ($birthDate >= $janBegin || $birthDate <= $janEnd)
echo "Your birthday month is janurary";
?>
依此类推,基于所有 12 个月。提交论坛时。
我的问题是如何为变量“生日”创建列表以与所有月份的开始和结束日期进行比较?
我查看了 if、elseif 和 swith-case 语句,但没有什么不能产生预期的结果?我可能做错了什么。但无法查明我的代码中的错误。
这就是把我带到这里的原因。
非常感谢您对此的任何帮助。谢谢
根据 ADyson 的要求
这段代码只是我想要做的一个例子。我在下面的 cmets 中已经说明,开始和结束日期将设置为随机变量。总变量设置为 12。这就是我选择使用月份的开始日期和结束日期的原因。 ADyson 我相信这个想法更字面化了然后我希望。
基本上代码看起来像这样。
<?php
$startdate1 = date("01/20")
$enddate1=date("02/27")
if ($bday >= $startdate1 && $bday <= $enddate1)
echo "response #1";
我也一直在对此进行更多研究,并发现了一个使用 if 和 elseif 语句的代码 sn-p,我发现它可以工作。但是还是遇到了一个问题。
当输入日期并循环代码时,它匹配错误的响应。所以说输入08/27 (m-d)
的日期它会停止并匹配
$option11Begin = date("11/25");
$option11End = date("12/23");
比较
elseif ($bday >= $option11Begin && $bday <= $option11End)
任何想法都是为什么会发生这种情况。谢谢。
【问题讨论】:
请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:您无需比较开始日期和结束日期或使用大量 switch 语句。只需将日期输入 PHP 的内置 DateTime
类,该类专门处理日期,然后从结果对象中仅输出月份名称。
if(isset($_POST['birthDay']))
$bday = new DateTime($_POST['birthDay']);
echo "Your birthday month is ".$bday->format("F");
模拟:http://sandbox.onlinephpfunctions.com/code/f4b8730927927adf976dfb103c58ba132ca9217f
文档链接:https://www.php.net/manual/en/class.datetime.php
此解决方案适用于一个月中的任何一天。它解析日期字符串,然后从生成的 DateTime
对象中,您始终可以获取月份值 - 或您想要的任何其他信息,或者与其他 DateTime
对象进行其他比较,或者您需要的任何内容。这比任何类型的字符串比较都更容易、更可靠
【讨论】:
第一个响应的 Ty。 &这是一个很好的答案,但它确实没有给出我正在寻找的洞察力。我基于我的问题和一个我不愿意在网上真正分享的项目代码。这个代码示例与我能想到的真实项目一样接近。但我需要比较 12 个项目列表中的两个日期来比较输入的日期。如示例所示,在比较 12 项中的每一项时,我有一个等于或大于/小于一个日期。以产生预期的结果。我可能想要考虑的任何想法来完成这项工作。谢谢。But I will need a comparison of two dates of a list of 12 items to compare the entered date
...你为什么需要它?我的代码以更简单的方式为您提供完全相同的结果。您是否运行了我提供的演示,并看到它有效?我无法想象为什么您更喜欢更复杂的解决方案。是否还有一些您没有提到的额外要求?
问:为什么我需要这样做?答:因为比较的日期实际上并不是本月的第一天和最后一天。因此,重申一下-您是对的,您提供的代码确实适用于此,我确实对其进行了测试。但就像我之前提到的,这是我正在处理的项目代码的更改,因此比较输入的日期以设置开始和结束日期以重现所需响应的基础。设置日期的实际日期更改可能是我不确定提及的附加要求。因此,泄露了项目的核心机密。我只需要比较 12 种可能性即可得到答案
the dates compared are not actually going to be the first and last of the month.
...没关系,我的解决方案适用于一个月中的任何一天——试试吧。它解析日期字符串,然后从生成的 DateTime 对象中您始终可以获取月份值 - 或您想要的任何其他信息,或者与其他 DateTime 对象进行其他比较,或者您需要的任何内容。这比任何类型的字符串比较都更容易、更可靠。
正如我之前所说,我必须使用两个单独的日期。对于我将按输入日期的结果检索的 12 个响应中的每一个,这些日期都将不同。您的代码仅适用于将时间日期匹配设置为系统日期和时间?您能否举一个具有两个不同设定日期的代码示例?如果我的问题不够清楚,无法解释我想要达到的目标,我深表歉意。以上是关于论坛日期 基于 if 语句匹配 1 of 12 的响应等于或大于比较(参数)的主要内容,如果未能解决你的问题,请参考以下文章