#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define SIZE (1024 * 10)
class Date
{
public :
Date(int year = 2000, int mounth = 1, int day = 1)
: _year(year)
, _mounth(mounth)
, _day(day)
{
}
bool operator<(const Date& d)
{
if (_year < d._year){
return true;
}
else{
if (_year == d._year && _mounth < d._mounth){
return true;
}
else{
if (_year == d._year && _mounth == d._mounth && _day < d._day){
return true;
}
}
}
return false;
}
Date& operator++()
{
_day++;
if (_day > getMounthDays(_year, _mounth)){
_day = 1;
_mounth++;
if (_mounth > 12){
_mounth = 1;
_year++;
}
}
return *this;
}
bool operator!=(const Date& d)
{
if (_year == d._year && _mounth == d._mounth && _day == d._day){
return false;
}
return true;
}
int operator-(const Date& d)
{
if (this == &d){
return 0;
}
int count = 0;
Date min(d);
Date max(*this);
if (max < min){
min = *this;
max = d;
while (min != max){
++min;
--count;
}
}
else{
while (min != max){
++min;
++count;
}
}
return count;
}
private :
bool isLoopYear(int year)
{
if (year % 400 == 0){
return true;
}
else if (year % 4 == 0 && year % 100 != 0){
return true;
}
return false;
}
int getMounthDays(int year, int mounth)
{
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLoopYear(year) && mounth == 2){
return 29;
}
return days[mounth];
}
private:
int _year;
int _mounth;
int _day;
};
int get_http_request(char* query)
{
//1.獲取到方法
char* method = getenv("REQUEST_METHOD");
if (method == NULL){
fprintf(stderr, "REQUEST_METHOD failed\n");
return -1;
}
//2.如果是GET方法,獲得query_string
if (strcmp(method, "GET") == 0){
char* query_string = getenv("QUERY_STRING");
if (query_string == NULL){
fprintf(stderr, "QUERY_STRING failed\n");
return -1;
}
strcpy(query, query_string);
}
//3.如果是POST方法,獲得content_length和body
return 0;
}
int main()
{
//1.基於CGI協議獲取到需要的參數
char query[SIZE] = {0};
int ret = get_http_request(query);
if (ret < 0){
return -1;
}
//2根據業務邏輯得到需要的結果
int year1, year2, mounth1, mounth2, day1, day2;
sscanf(query, "year=%d&mounth=%d&day=%d&year=%d&mounth=%d&day=%d", &year1, &mounth1, &day1, &year2, &mounth2, &day2);
Date d1(year1, mounth1, day1);
Date d2(year2, mounth2, day2);
int result = d2 - d1;
//3.將結果構造爲HTML,寫回到標準輸入中
printf("<html><head><meta charset = \"utf-8\"></head><body><h1>相差:%d</h1><a href=\"http://39.106.164.95:9000/index.html\">返回首頁</a></body></html>", result);
return 0;
}