PDA

View Full Version : بدست آوردن یک دوره مابین دو تاریخ شمسی به صورت آغاز و پایان ماه



سینا2010
چهارشنبه 25 خرداد 1390, 22:02 عصر
دوستان عزیز آیا راهی هست که بشه تاریهای اول و آخر هر ماه بین دو تاریخ رو به دست آورد
ببنید من برای دریافت تاریخهای مابین دو مرخصی استعلاجی بهش نیاز دارم که باید به این صورت باشه . مثلا از تاریخ 1390/02/23 تا تاریخ 1390/07/22 به این صورت خروجی بده :

1390/02/23 - 1390/02/31
1390/03/01 - 1390/03/31
1390/04/01 - 1390/04/31
1390/05/01 - 1390/05/31
1390/06/01 - 1390/06/31
1390/07/01 - 1390/07/22

یکی از دوستان گفته باید از حلقه استفاده کنم اما نمی دونم چطور چنین چیزی رو می شه تو حلقه انداخت و یا آیا روش دیگه ای هست که بشه تاریخ رو به این صورت به دست آرود ؟ ممنونم از همه

aghayex
پنج شنبه 26 خرداد 1390, 06:45 صبح
کد زیر به زبان سی شارپ هست خودت به وی بی تبدیلش کن ( تغییرات جزیی در ظاهر )

int y1 = Convert.ToInt32(date1.Text.Substring(0, 4));//سال تاریخ ابتدا را به عدد تبدیل و در متغیر قرار می دهد
int m1 = Convert.ToInt32(date1.Text.Substring(5, 2));//ماه تاریخ ابتدا را به عدد تبدیل و در متغیر قرار می دهد

int y2 = Convert.ToInt32(date2.Text.Substring(0, 4));//سال تاریخ انتها را به عدد تبدیل و در متغیر قرار می دهد
int m2 = Convert.ToInt32(date2.Text.Substring(5, 2));//ماه تاریخ انتها را به عدد تبدیل و در متغیر قرار می دهد

string rooz1 = date1.Text.Substring(8, 2);
string rooz2 = "30";
string mtemp;

while ((y1 != y2) || (m1 != (m2+1)))
{
if (m1 == 13)
{
m1 = 1;
y1++;
}
if (m1 == m2)
{
rooz2 = date2.Text.Substring(8, 2);
}
if (m1 < 10)
{
mtemp = "0" + m1.ToString();
}
else
{
mtemp = m1.ToString();
}

if ((m1 >= 1) && (m1 <= 6)&&(m1!=m2))
{
combobox.Items.Add(y1.ToString() + "/" + mtemp + "/" + rooz1 + "---" + y1.ToString() + "/" + mtemp + "/" + (Convert.ToInt32(rooz2) + 1).ToString());
}
else
{
combobox.Items.Add(y1.ToString() + "/" + mtemp + "/" + rooz1 + "---" + y1.ToString() + "/" + mtemp + "/" + rooz2);
}

rooz1 = "01";
m1++;
}

سینا2010
پنج شنبه 26 خرداد 1390, 08:06 صبح
دوست عزیز بسیار ممنونم از راهنمایی شما اما من با کد شما دو تاریخ رو امتحان کردم پایان ماهها رو کمتر از 31 و یا 30 نشون می ده . به تصویر ضمیمه دقت کنید. ممنون می شم راهنمایی بفرمائید. با تشکر از شما

aghayex
پنج شنبه 26 خرداد 1390, 12:19 عصر
دوست عزیز قرار نیست شما هیچ فکر نکنید و کرکره ی خلاقیت رو پایین بکشی

int y1 = Convert.ToInt32(date1.Text.Substring(0, 4));//سال تاریخ ابتدا را به عدد تبدیل و در متغیر قرار می دهد
int m1 = Convert.ToInt32(date1.Text.Substring(5, 2));//ماه تاریخ ابتدا را به عدد تبدیل و در متغیر قرار می دهد

int y2 = Convert.ToInt32(date2.Text.Substring(0, 4));//سال تاریخ انتها را به عدد تبدیل و در متغیر قرار می دهد
int m2 = Convert.ToInt32(date2.Text.Substring(5, 2));//ماه تاریخ انتها را به عدد تبدیل و در متغیر قرار می دهد

string rooz1 = date1.Text.Substring(8, 2);
string rooz2 = "30";
string mtemp;

while ((y1 != y2) || (m1 != (m2+1)))
{
if (m1 == 13)
{
m1 = 1;
y1++;
}
if ((m1 == m2)&&(y1==y2))
{
rooz2 = date2.Text.Substring(8, 2);
}
if (m1 < 10)
{
mtemp = "0" + m1.ToString();
}
else
{
mtemp = m1.ToString();
}

if ((m1 >= 1) && (m1 <= 6))
{
combobox.Items.Add(y1.ToString() + "/" + mtemp + "/" + rooz1 + "---" + y1.ToString() + "/" + mtemp + "/" + (Convert.ToInt32(rooz2) + 1).ToString());
}
else
{
combobox.Items.Add(y1.ToString() + "/" + mtemp + "/" + rooz1 + "---" + y1.ToString() + "/" + mtemp + "/" + rooz2);
}

rooz1 = "01";
m1++;
}