我试过这样做:
$(this).after('<div>...</div>').next().css('border', '1px').fadeOut('5000');
但我不知道怎么理解我应该比较和减少什么,有人可以解释我
我需要做些什么来告诉人们的日期,例如在浮动时 比较用户输入的实际时间和日期的年,月和日 该计划?
答案 0 :(得分:1)
您的代码逻辑存在问题。 例如:
Datum is 31/12/1982
Dnes is 01/01/2000
年差为18岁,但年龄为17天和2天。
考虑使用标准库函数而不是重新发明轮子。 difftime可能很有用,例如
这是一个非常肮脏的例子,但它可以完成工作:
time_t dnes;
time(&dnes);
// Set datum here ...
cin >> Datum->day >> Datum->month >> Datum->year;
datum.tm_mday = Datum->day;
datum.tm_mon = Datum->month - 1;
datum.tm_yday = Datum->year - 1900;
datum->tm_yday+=18;
if (difftime(dnes, mktime(&datum)) <0 )
cout << "not full aged " << endl;
else
cout << "full aged " << endl;
答案 1 :(得分:0)
使用这些库:
http://howardhinnant.github.io/date/date.html
http://howardhinnant.github.io/date/tz.html
这就是解决这个问题的方法。首先是代码,然后是解释:
#include "tz.h"
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << "Enter birthday [day month year]:";
int di, mi, yi;
std::cin >> di >> mi >> yi;
if (std::cin.fail())
{
std::cout << "Invalid date\n";
return 1;
}
auto y = year{yi};
if (!y.ok())
{
std::cout << "Invalid year\n";
return 1;
}
auto m = month(mi);
if (!m.ok())
{
std::cout << "Invalid month\n";
return 1;
}
auto d = day(di);
if (!d.ok())
{
std::cout << "Invalid day\n";
return 1;
}
auto birthday = y/m/d;
if (!birthday.ok())
{
std::cout << "Invalid birthday\n";
return 1;
}
auto local_time = current_zone()->to_local(system_clock::now());
auto today = year_month_day{floor<days>(local_time)};
auto age = today.year() - birthday.year();
if (birthday + age > today)
--age;
if (age >= years{18})
std::cout << "full aged at " << age.count() << "\n";
else
std::cout << "not full aged at " << age.count() << "\n";
}
我首先会遇到一些麻烦来检查用户输入的有效性。我下面的内容似乎是最低限度:
一个更强大的程序可能会给用户一些关于他输入内容的反馈,并给他另一个机会来纠正他的错误。
一旦确定我们有一个有效的生日,我们需要在当地时区获取当前日期。这样:
auto local_time = current_zone()->to_local(system_clock::now());
获取当地时间。
本地时间可以转换为当地年,月和日:
auto today = year_month_day{floor<days>(local_time)};
这个计算遵循你的生日在当地午夜开始的习俗,无论你实际出生的是什么时间(以及地球上的哪个地方)。换句话说,一旦建立当地年/月/日,这个问题就与当地时区,甚至是当地时间无关。
接下来,计算当前年龄:
auto age = today.year() - birthday.year();
if (birthday + age > today)
--age;
今天和生日之间的差异是对年龄的第一次近似。通过计算您的生日今年的日期来细化这种近似值。如果今年的生日仍然在未来,那么根据习惯,我们将其视为年轻一岁。如果我们做的事情较少倾向于法律制度,更多地倾向于科学工作,我们可能会以其他方式进行计算,例如四舍五入到最接近的年份(也很容易用这个库)。
如果生日是在2月29日,则上述代码仍然有效:birthday + age
将导致无效日期(75%几率),例如:feb / 29/2015。但是,这个无效日期将正确地比较feb / 28/2015和2015年3月1日以下,正如我们所需要的那样!无效的日期是你的朋友,而不是你的敌人 - 你只需知道它们存在以及如何应对它们。
现在报告你的发现是一件简单的事情:
if (age >= years{18})
std::cout << "full aged at " << age.count() << "\n";
else
std::cout << "not full aged at " << age.count() << "\n";