View Full Version : فاصله بین دو تاریخ بر حسب تعداد روز !!
nazanin20
چهارشنبه 19 خرداد 1389, 14:32 عصر
سلام
من میخام فاصله دوتا تاریخ رو برحسب روز به دست بیارم
مثلا وقتی کاربر زد :
17/2/1388
تاریخ دومم زد :
23/3/1389
حالا تعدار روز بین این دو رو محاسبه کنه
ممنونم
ztx4
پنج شنبه 20 خرداد 1389, 01:07 صبح
من همین الان یک الگوریتم به صورت بداحه به ذهنم رسید،نمی دونم چه قدر این الگوریتم بهینه است اما می گم:
فاصله ی روزها +فاصله ی ماه ها *30 + فاصله ی سالها *365
tdkhakpur
پنج شنبه 20 خرداد 1389, 01:16 صبح
من همین الان یک الگوریتم به صورت بداحه به ذهنم رسید،نمی دونم چه قدر این الگوریتم بهینه است اما می گم:
فاصله ی روزها +فاصله ی ماه ها *30 + فاصله ی سالها *365
اصل مساله کبیسه هست؟
با تابع زیر هر دو تاریخ را به روز تبدیل کنید و میماند یک تفریق ساده که تعداد روزها را به شما نشان دهد.
long HejriDate2Days(Date date)
{
long days;
short int HejriMontsDays[] = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};
short int kabise;
kabise = date.Y/4;
days = date.Y*365+kabise;
if( date.Y%4 == 0 && date.Y > 0 )
HejriMontsDays[11] = 30;
for( int i=0; i<12 && i<date.M-1; i++ ){
days += HejriMontsDays[i];
}
days += date.D;
return days;
}
ztx4
پنج شنبه 20 خرداد 1389, 01:18 صبح
بسیار عالی بود.
ما هم استفاده کردیم.
ممنون
bmd007
چهارشنبه 29 آبان 1392, 00:00 صبح
اگ بخواهیم از Date استفاده نکنیم و 2 تاریخ را به صورت yymmdd از کاربر دریافت کنیم مسئله چگونه حل می شود؟
mohammad hoseiny
یک شنبه 03 آذر 1392, 08:44 صبح
اگ بخواهیم از Date استفاده نکنیم و 2 تاریخ را به صورت yymmdd از کاربر دریافت کنیم مسئله چگونه حل می شود؟
این برنامه با همین فرمت که فرموده اید اجرا میشود::
int fasele(char n[],int num)
{
int tmp=0;
for(int i = 0 ;i<num;i++)
{
tmp+=(n[i]-'0')*pow(10,num-i-1);
}
return tmp;
}
int past(int d,int m,int y)
{
int passed=0;
for(int i = 1 ; i < m ; i++)
{
if(i <= 6)passed+=31;
else passed+=30;
}
passed+=d;
for(int i=0;i<y;i++)
{
if((i-3)%4==0)passed+=366;
else passed+=365;
}
return passed;
}
void main()
{
cout<<"2 tarikh ba formate ((yymmdd)) vared konid:"<<endl;
cout<<"((y:sal m:mah d:rooz))"<<endl;
char a[9] = {};
int d=0, m=0, y=0;
int w1=0;
int w2=0;
cin>>a;
y=fasele(a,2);
m=fasele(a+2,2);
d=fasele(a+4,2);
w1=past(d,m,y);
cin>>a;
y=fasele(a,2);
m=fasele(a+2,2);
d=fasele(a+4,2);
w2=past(d,m,y);
if(w2>w1)cout<<((w2-w1))<<endl;
if(w1>w2)cout<<((w1-w2))<<endl;
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.