所以我使用了一种类似 c++ 语法的脚本语言,我试图想出检查日期是否在范围内的最佳方法。我遇到的问题是,如果当前日期在新的月份,则检查失败。
这是我的代码的样子:
if(iMonth >= iStartMonth && iMonth <= iEndMonth)
{
if(iDay >= iStartDay && iDay <= iEndDay)
{
if(iYear >= iStartYear && iYear <= iEndYear)
{
bEnabled = true;
return;
Run Code Online (Sandbox Code Playgroud)
当我有这样的事情时:
开始日期:2010 年 3 月 27 日
结束日期:2010 年 4 月 15 日
当前日期:2010 年 3 月 31 日
日期检查失败,因为 if (iDay <= iEndDay) 没有通过。脚本语言没有很多与时间相关的功能,我无法比较时间戳,因为我允许用户将“03:27:2010”和“04:15:2010”作为开始/结束日期在一个配置文件中。我假设我只是没有直接思考并且错过了一个简单的解决方案。
您确实应该使用boost::DateTime而不是尝试重写轮子(当轮子是日期/时间框架时,它并不像看起来那么简单)。仅当您粘贴的代码是 C++ 而不是您的脚本语言时(不清楚),才会出现这种情况。另外我可以建议使用Lua代替吗?:)
无论如何,问题就在这里:
if(iDay >= iStartDay && iDay <= iEndDay)
Run Code Online (Sandbox Code Playgroud)
您应该仅在 iMonth == iStartMonth 时检查此项,并且对于最后一个月也是如此。否则31 <= 15 将失败iDay = 31。iEndDay = 15
另外,您应该先检查年份,然后检查月份,然后检查日期。