所以我使用的是一种类似于c ++的脚本语言,我正在尝试考虑检查日期是否在范围内的最佳方法。我遇到的问题是,如果当天是新月,则检查失败。
以下是我的代码:
if(iMonth >= iStartMonth && iMonth <= iEndMonth)
{
if(iDay >= iStartDay && iDay <= iEndDay)
{
if(iYear >= iStartYear && iYear <= iEndYear)
{
bEnabled = true;
return;
当我有这样的事情时:
Start date: 3 27 2010 End Date: 4 15 2010 Current Date: 3 31 2010
日期检查失败,因为if(iDay&lt; = iEndDay)未通过。脚本语言没有很多时间相关的功能,我无法比较时间戳,因为我允许用户将“03:27:2010”和“04:15:2010”作为开始/结束日期在配置文件中。我假设我只是没有直接思考并且错过了一个简单的修复。
答案 0 :(得分:4)
您可以将所有日期转换为YYYY-MM-DD
格式的字符串,然后进行字典比较。
答案 1 :(得分:3)
我找到的好方法是使用以下公式
(年* 10000)+(月* 100)+天
日期25/09/2013(日/月/年)变为20130925 为开始日期,结束日期和您想要比较和比较它们的日期做, 生成的代码将如下所示
bool isDateInRange(int day, int month, int year, int startDay, int startMonth, int startYear, int endDay, int endMonth, int endYear){
int entryDate = (year * 10000) + (month * 100) + day;
int startDate = (startYear * 10000) + (startMonth * 100) + startDay;
int endDate = (endYear * 10000) + (endMonth * 100) + endDay;
if (entryDate >= startDate && entryDate <= endDate){
return true;
}
else{
return false;
}
}
答案 2 :(得分:1)
你应该真的使用boost::DateTime而不是试图重写轮子(当轮子是一个日期/时间框架时,它并不像它看起来那么微不足道)。这只适用于您粘贴的代码是C ++而不是您的脚本语言(不清楚)。我还可以建议使用Lua吗? :)
无论如何问题出在这里:
if(iDay >= iStartDay && iDay <= iEndDay)
如果iMonth == iStartMonth,您应该只检查这个,并且结束月份也是如此。否则iDay = 31
,iEndDay = 15
和31 <= 15将失败。
此外,您应该先检查年份,然后是月份,然后是当天。
答案 3 :(得分:0)
如果你没有找到一个可以满足你需要的库,或者你喜欢自己做事,我就是Calendrical Calculations的忠实粉丝,它展示了如何将每一天表示为整数,以及如何在大量数量的约会系统中来回转换为月/日/年。整数表示使得调整和比较变得微不足道 - 您可以通过取模7的值来获得星期几!原作是一篇期刊文章,已经变成了一本书。
答案 4 :(得分:-2)
#include <iostream>
#include <ctime>
using namespace std;
bool isDateInRange(int day, int month, int year, int startDay, int startMonth, int startYear, int endDay, int endMonth, int endYear){
int entryDate = (year * 10000) + (month * 100) + day;
int startDate = (startYear * 10000) + (startMonth * 100) + startDay;
int endDate = (endYear * 10000) + (endMonth * 100) + endDay;
if (entryDate >= startDate && entryDate <= endDate){
return true;
}
else{
return false;
}
}
void main()
{
int day, month, year, startDay, startMonth, startYear, endDay, endMonth, endYear;
// 11 June 2015
// current date
//day = 11; month = 6; year = 2015;
time_t t = time(NULL);
tm* timePtr = localtime(&t);
day = timePtr->tm_mday;
//cout << "day: " << day;
month = timePtr->tm_mon + 1;
//cout << "month: " << month;
year = timePtr->tm_year + 1900;
//cout << "year: " << year;
// 1 Jan 2015
startDay = 1; startMonth = 1; startYear = 2015;
// 12 July 2015
endDay = 12; endMonth = 5; endYear = 2015;
bool isInRange = isDateInRange(day, month, year, startDay, startMonth, startYear, endDay, endMonth, endYear);
if (isInRange)
{
cout << "In range " << endl;
}
else
{
cout << "Not in range " << endl;
}