Разница между датами в днях

267
13 сентября 2017, 13:32

Вообщем, ввожу данные 1-й даты и 2-й даты и пытаюсь найти разницу между ними в днях, решил для начала найти разницу в днях в месяцах и годах, месяцы и годы перевожу в дни и все суммирую, но кол-во месяцев не подсчитывает

#include <iostream>
#include <cmath>
using namespace std;
int main() 
{
int year_user, mon_user, day_user;
int current_year, current_mon, current_day;
int num_days, num_mon=0, num_years;
int leap_year = 0, leap_like = 0;
int m, m1, i, j;
int M[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"Введите год месяц и день вашего дня рождения(в формате ГГГГ М Д):"<<endl;
   cin>>year_user>>mon_user>>day_user;
cout<<"Ваша дата рождения:"<<year_user<<"."<<mon_user<<"."<<day_user<<endl;
cout<<"Введите желаему дату для вычесления количество дней(в формате ГГГГ М Д):"<<endl; 
   cin>>current_year>>current_mon>>current_day;
cout<<"Желаемая дата:"<<current_year<<"."<<current_mon<<"."<<current_day<<endl;
//рассчитываем количество лишних дней
   num_days = day_user - current_day;
   num_days = abs(num_days);
cout<<"Количество дней между датами:"<<num_days<<endl;
//проверяем какой из месяцев больше для корректной работы(ПРОБЛЕМА) 
 if (mon_user >= current_mon)
{
    int m = mon_user;
    int m1 = current_mon; 
}
else
{
    int m = current_mon; 
    int m1 = mon_user;
}
//рассчитываем количество лишних месяцев    
for(i=m; i<m1; i++)
{
 num_mon += M[i-1];
}
cout<<"Количество дней между месяцами:"<<num_mon<<endl;
//рассчитываем количество лет между датами и проверяем высокосный ли он
for(j=year_user; j<current_year; j++)
{
    if((j%4 == 0 && j%100 != 0) || (j%400 == 0))
    {
        num_years += 366;   
    }
    else
    {
        num_years += 365;
    }
}
  cout<<"Количество дней между годами:"<<num_years<<endl;
return 0;
}
Answer 1

Я бы не мучил эти дни, месяцы и годы... Есть такое хорошее понятие как юлианская дата с хорошо разработанным алгоритмом расчета, и ваша задача - просто вычисление разности двух таких дат.

Если вы не планируете работать с датами до введения григорианского календаря и учитывать введение в России григорианского в 1918 году :), то вам достаточно запрограммировать это:

Как видите, даже ни одного условного перехода :)

Answer 2

Чтобы найти возраст в днях, можно готовую библиотеку использовать, к примеру, date.h для C++11/c++14:

#include <iostream>
#include "date.h" 
int main()
{
  using namespace date;
  sys_days birthday;
  if(!(std::cin >> parse("%Y %m %d", birthday)))
    return 1; // error
  sys_days today = floor<days>(std::chrono::system_clock::now());
  std::cout << (today - birthday).count() << std::endl;
}

Пример:

$ g++ -std=c++14  -I/path/to/date *.cc
$ echo 1982 6 25 | ./a.out
12864

Вот пример, который принимает во внимание время дня.

READ ALSO
jquery отследить изменение содержимого div

jquery отследить изменение содержимого div

Есть class содержимым является цена на товар 2 040,00 есть кнопка при нажатии на неё цена меняется

293
как разбить массив на значения JQuery?

как разбить массив на значения JQuery?

Как разбить массив на части? есть код который сохраняет данные с чекбокс:

273
Преобразование массива PHP в JS

Преобразование массива PHP в JS

Всем доброго времени сутокПодскажите пожалуйста столкнулся с такой задачей, есть плагин графиков на js в нем есть такие массивы с данными:

277