PDA

View Full Version : فاصله بین دو تاریخ بر حسب تعداد روز !!



nazanin20
چهارشنبه 19 خرداد 1389, 13:32 عصر
سلام
من میخام فاصله دوتا تاریخ رو برحسب روز به دست بیارم
مثلا وقتی کاربر زد :
17/2/1388
تاریخ دومم زد :
23/3/1389

حالا تعدار روز بین این دو رو محاسبه کنه
ممنونم

ztx4
پنج شنبه 20 خرداد 1389, 00:07 صبح
من همین الان یک الگوریتم به صورت بداحه به ذهنم رسید،نمی دونم چه قدر این الگوریتم بهینه است اما می گم:

فاصله ی روزها +فاصله ی ماه ها *30 + فاصله ی سالها *365

tdkhakpur
پنج شنبه 20 خرداد 1389, 00: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, 00:18 صبح
بسیار عالی بود.
ما هم استفاده کردیم.
ممنون

bmd007
سه شنبه 28 آبان 1392, 23:00 عصر
اگ بخواهیم از Date استفاده نکنیم و 2 تاریخ را به صورت yymmdd از کاربر دریافت کنیم مسئله چگونه حل می شود؟

mohammad hoseiny
یک شنبه 03 آذر 1392, 07: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;
}