检查解析的日期是否在日期范围内

5 c++ scripting

所以我使用了一种类似 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”作为开始/结束日期在一个配置文件中。我假设我只是没有直接思考并且错过了一个简单的解决方案。

sth*_*sth 5

您可以将所有日期转换为格式的字符串YYYY-MM-DD,然后进行字典顺序比较。


Tho*_*ini 1

您确实应该使用boost::DateTime而不是尝试重写轮子(当轮子是日期/时间框架时,它并不像看起来那么简单)。仅当您粘贴的代码是 C++ 而不是您的脚本语言时(不清楚),才会出现这种情况。另外我可以建议使用Lua代替吗?:)


无论如何,问题就在这里:

if(iDay >= iStartDay && iDay <= iEndDay)
Run Code Online (Sandbox Code Playgroud)

您应该仅在 iMonth == iStartMonth 时检查此项,并且对于最后一个月也是如此。否则31 <= 15 将失败iDay = 31iEndDay = 15

另外,您应该先检查年份,然后检查月份,然后检查日期。