PDA

View Full Version : شمارش تعداد ماه بین دو تاریخ



h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 08:56 صبح
سلام
میخوام دو تاریخ را کاربر به سیستم بدهد و با تفاضل دو تاریخ ، ماه های بین دو تاریخ را به من بدهد
مثلا تاریخ 1394/01/01 و تاریخ 1394/03/01 ===>>>> 2 ماه
لطفا راهنمایی کنید

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 09:16 صبح
تاریخ اول رو از تاریخ دوم کم کن نیازی به شمارش نیست مثلا :


DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now;
int month = ((d1.Year - d2.Year) * 12) + d1.Month - d2.Month;


یا :

d1.Month - d2.Month;

محمد رضا فاتحی
چهارشنبه 23 اردیبهشت 1394, 09:32 صبح
ببین این بدردت می خوره
http://stackoverflow.com/questions/4638993/difference-in-months-between-two-dates

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 17:40 عصر
تشکر از لطف دوستان بزرگوار
ولی من مشکلم چیزه دیگه ای هستش
من میخوام تعداد ماه هایی که داخلش قرار گرفته ایم را شمازشز کنم
مثلا ازتاریخ 1393/11/28 تا تاریخ 1394/02/02 = تعداد ماه هایی که داخل قرار گرفتیم 4 ماه هستش
ماه 11 = 1 ماه
ماه12 = 1 ماه
ماه 1 = 1 ماه
ماه 2 = 1 ماه
مجموعا 4 ماه
نمی دونم از چه گزینه هایی استفاده کنم خیلی مطالعه کردم ولی به نتیجه نرسیدم
لطفا راهنمایی کنید
تشکر

بیتا حکمت
چهارشنبه 23 اردیبهشت 1394, 17:52 عصر
تشکر از لطف دوستان بزرگوار
ولی من مشکلم چیزه دیگه ای هستش
من میخوام تعداد ماه هایی که داخلش قرار گرفته ایم را شمازشز کنم
مثلا ازتاریخ 1393/11/28 تا تاریخ 1394/02/02 = تعداد ماه هایی که داخل قرار گرفتیم 4 ماه هستش
ماه 11 = 1 ماه
ماه12 = 1 ماه
ماه 1 = 1 ماه
ماه 2 = 1 ماه
مجموعا 4 ماه
نمی دونم از چه گزینه هایی استفاده کنم خیلی مطالعه کردم ولی به نتیجه نرسیدم
لطفا راهنمایی کنید
تشکر

مثلا" اینطوری :

کاربر در Textbox اول ، سال اولی رو به شمسی وارد می کنه

کاربر در Textbox دوم سال دوم رو به به شمسی وارد می کنه

با فشردن کلیک روی باتن به کاربر نشون داده میشه که از تاریخ اول تا تاریخ دوم چه تعداد ماه سپری شده

چیزی که نیاز دارین همینه دیگه ، درست متوجه شدم ؟

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 18:40 عصر
بله درسته
طبق مثالی که دادم
من سال شروع و پایان را به میلادی تبدیل کردم که بتونم از کدهای سی شارپ بهتر استفاده کنم
ولی این که چطوری تعداد ماه ها را پیدا کنم مکی دونم چکار کنم؟
مثلا اگه تاریخ شروع 1393/11/28 و پایان 1394/01/31 بود === نتیجه ==>>> 3 ماه میشه
و لی اگر شروع 1393/11/28 و پایان 1394/02/01 بود ==== نتیجه ===>>>> 4 ماه بشه
باتشکر

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 18:42 عصر
عزیز من شما اگر پست های 2 و 3 رو نگاه میکردی و اجراشون رو میگرفتی دقیقا همینی که شما میخواستی رو بهت میداد مثلا به قول خودتون:
اگه تاریخ شروع 1393/11/28 و پایان 1394/01/31 بود === نتیجه ==>>> 3 ماه میشه
برای تاریخهای شمسی هم از DateTimeOffset استفاده کن/.

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 18:52 عصر
دوست عزیز پست دومی را قبلا اجرا کردم که جواب را درست نمیده
پست سوم گونه های مختلف را مثال زده ولی نمیدونم کدومش به کاره من میاد
البته بسیار سایت جالبی هستش چون منبع اطلاعاتی خیلی خوب و جالبیه من تشکر مینک از شما بزرگوار که لطف کردید این پست را معرفی کردید
اگه ممکنه لطفا بگید کدوم مثالش مسکل منو حل میکنه؟
باتشکر

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 19:00 عصر
دوست عزیز پست دومی را قبلا اجرا کردم که جواب را درست نمیده
پست سوم گونه های مختلف را مثال زده ولی نمیدونم کدومش به کاره من میاد
البته بسیار سایت جالبی هستش چون منبع اطلاعاتی خیلی خوب و جالبیه من تشکر مینک از شما بزرگوار که لطف کردید این پست را معرفی کردید
اگه ممکنه لطفا بگید کدوم مثالش مسکل منو حل میکنه؟
باتشکر

جایی که تیک سبز خورده یعنی اینکه کسی که سوال کرده مد نظرش و جوابش همون پست بوده و تعداد اعدادی که کنار هر پست نشون میده نشان دهنده رای تعداد افرادی هستش که از لحاظ اونها اون پست کاملتر بوده.

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 19:12 عصر
DateTimeOffset DTO1 = Convert.ToDateTime(textBox1.Text);
DateTimeOffset DTO2 = Convert.ToDateTime(textBox2.Text);
int month = ((DTO1.Year - DTO2.Year) * 12) + DTO1.Month - DTO2.Month;
MessageBox.Show(month.ToString());

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 19:33 عصر
جناب بیات تشکر از لطف شما
ولی اینو انجام دادم قبلا ----- ولی جوابم این نیست این کد میخوام دقیقا جوابش بشه 3
اگر تاریخ 1394/01/31 را به تاریخ 1394/02/01 تغییر بدی باید جواب بشه 4 چون چها تا ماه را می بینه= در کل تعداد ماه هایی که دیده میشه ملاک هستش نه تفاضل تاریخ؟
تشکر
اگه میشه بازم کمکم کنیدچون خیلی درگیرم کرده

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 19:44 عصر
کافیه خروجی رو به اضافه یک کنی. اینطوری جواب درست میده



DateTimeOffset DTO1 = Convert.ToDateTime(textBox1.Text);
DateTimeOffset DTO2 = Convert.ToDateTime(textBox2.Text);
int month = ((DTO1.Year - DTO2.Year) * 12) + (DTO1.Month - DTO2.Month) + 1;

MessageBox.Show(month.ToString());

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 19:49 عصر
متاسفانه همه جوری امتحان کردم ولی جواب صحیح نیست
شما تست کنید و تاریخ ها را عوض کنید متوجه میشید که نمیشه
احتمالا شرط های تودر تو باید بنویسم یکی از شرط ها را نوشتم ولی بازم اشتباه خروجی دارم
masktxtdate_start.BackColor = Color.White;
DateTime date1 = DateTime.Parse(ShamsiToMiladi(masktxtdate_start.Te xt));
DateTime date2 = DateTime.Parse(ShamsiToMiladi(masktxt_sarresid.Tex t)); //(Barbod1.IrDate));

int year = date2.Year - date1.Year;

int days1 = date2.Day - date1.Day;
//--------------------------------------------------=
//double mah2 = date1.Subtract(date2).Days / (365.25 / 12); //http://stackoverflow.com/questions/4638993/difference-in-months-between-two-dates
//-------------------------------------------
if (days1 < 0)
{
date2 = date2.AddMonths(-1);
days1 += DateTime.DaysInMonth(date2.Year, date2.Month);
}
int months = date2.Month - date1.Month;
if (months < 0)
{
date2 = date2.AddYears(-1);
months += 12;
}
int years = (date2.Year - date1.Year);

if (days1 >= 1)
{
months += 1;
}

richTextBox1.Text += years.ToString()+"\n";
richTextBox1.Text += months.ToString() + "\n";
richTextBox1.Text += days1.ToString() + "\n";
// richTextBox1.Text += mah2;

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 20:35 عصر
متاسفانه همه جوری امتحان کردم ولی جواب صحیح نیست
شما تست کنید و تاریخ ها را عوض کنید متوجه میشید که نمیشه

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 20:47 عصر
سلام
این چه زبانی هستش؟
من این کد را میخوام برای رفع مشکلم131199131199

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 20:50 عصر
Count full months between two dates (http://stackoverflow.com/questions/11673136/count-full-months-between-two-dates)

http://stackoverflow.com/questions/11673136/count-full-months-between-two-dates

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 21:07 عصر
Count full months between two dates (http://stackoverflow.com/questions/11673136/count-full-months-between-two-dates)

http://stackoverflow.com/questions/11673136/count-full-months-between-two-dates

این زبان Sql است، من که تست کردم با خروجیهای مختلف کاملا درست جواب میده، فرض بین دوماه 12 , 3
12-3 = 9 که به اضافه ماهی که داخلش هستی میشه 10 ماه . چه تاریخی برای شما اشتباه میزنه؟

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 21:13 عصر
جناب بیات من تعداد ماه را میخوام شما تاریخ 1393/11/28 را منهای 1394/01/31 اگر کنی ============جواب میشه (تعداد ماه)=3
ولی اگر تاریخ 1393/11/28 را منهای 1394/02/01 کنی باید جواب بشه ==============تعداد ماه = 4
شمارش تعداد ماه را میخوام یعنی تعداد ماه های بین دو تاریخ و ماه هایی که تاریخ اول و اخر داخلش هستند
توجه توجه
تعداد ماه های اول و اخر + تعداد ماه های وسط دوتاریخ!!!!!!!!!!!

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 21:28 عصر
date start = 1393/05/29
date end = 1393/07/01
count month between two date = 3
لطفا اگه کدی برای این قضیه وجود داره بفرمایید

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 21:29 عصر
ماه اول + ماه اخر + ماه های وسط

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 21:35 عصر
date start = 1393/05/29
date end = 1393/07/01
count month between two date = 3
لطفا اگه کدی برای این قضیه وجود داره بفرمایید

131203
بی دقتی میکنی.!!! خسته ای از بس تست کردی فکر میکنی نتیجه ای نداره اینم کدش:


private void button1_Click(object sender, EventArgs e)
{
DateTimeOffset DTO1 = Convert.ToDateTime(textBox1.Text);
DateTimeOffset DTO2 = Convert.ToDateTime(textBox2.Text);



int month = ((DTO1.Year - DTO2.Year) * 12) + (DTO1.Month - DTO2.Month) + 1;
MessageBox.Show(month.ToString());

}

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 22:01 عصر
جناب بیات عزیز واقعا تشکر
درست شد
بالاخره مشکل ما هم بدست توانمند شما حل شد
حالا باید نمونه های مختلف را اجرا کنم اگه مشکلی بود بازم مزاحم میشم
واقعا تشکر امروز بیش از 10 ساعت هستش دارم با این قضیه چنگ میکنم ولی بالاخره شما لطف کردید تا درست شد

h.gheidrlou
چهارشنبه 23 اردیبهشت 1394, 23:09 عصر
بازم مشکل
البته شاید بشه با شرط حلش کرد ولی مطرح کردنش خالی از لطف نیست
تاریخ شروع 1393/11/28
تاریخ پایان 1394/02/01
جواب ==========4

تاریخ شروع 1393/11/28
تاریخ پایان 1394/02/29
جواب ==========3
البته میدونم بخاطره تاریخ میلادی است ولی من اون رو تبدیل کردم چون به میلادی خطا میداد - در تبدیل شمسی به میلادی ماههای کمتر از 30 و 31 روز ره نمیخونه
ایا میتونم شرط بنویسم که اگر شماره روز بین 28 تا 31 نبود 1 واحد اضافه کند؟؟

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 23:54 عصر
اول تبدیل کن به ملادی بعد برگردون به شمسی.
اینم تبدیل میلادی به شمسی کدش:


public static string MiladiToShamsi(DateTime _date)
{
try {
PersianCalendar pc = new PersianCalendar();
StringBuilder sb = new StringBuilder();
sb.Append(pc.GetYear(_date).ToString("0000"));
sb.Append("/");
sb.Append(pc.GetMonth(_date).ToString("00"));
sb.Append("/");
sb.Append(pc.GetDayOfMonth(_date).ToString("00"));
return sb.ToString();
}
catch (ArgumentOutOfRangeException) {

return DateTime.Now.Date.ToString();
}
}

pouria_bayat
پنج شنبه 24 اردیبهشت 1394, 00:18 صبح
بازم مشکل
البته شاید بشه با شرط حلش کرد ولی مطرح کردنش خالی از لطف نیست
تاریخ شروع 1393/11/28
تاریخ پایان 1394/02/01
جواب ==========4

تاریخ شروع 1393/11/28
تاریخ پایان 1394/02/29
جواب ==========3
البته میدونم بخاطره تاریخ میلادی است ولی من اون رو تبدیل کردم چون به میلادی خطا میداد - در تبدیل شمسی به میلادی ماههای کمتر از 30 و 31 روز ره نمیخونه
ایا میتونم شرط بنویسم که اگر شماره روز بین 28 تا 31 نبود 1 واحد اضافه کند؟؟

اینرو الان نوشتم فکر کنم دیگه کلا راحتت کنه کمی روش کار کن در صورت ورودی نامناسب خطا نده کلا بهتره:


private void button1_Click(object sender, EventArgs e)
{
int month = SubDate(textBox1.Text, textBox2.Text);
MessageBox.Show(month.ToString());

}
public static int SubDate(string FirstDate, string SecoundDate)
{
string[] Fwords = FirstDate.Split('/');
int Fyear = Int32.Parse(Fwords[0]);
int Fmonth = Int32.Parse(Fwords[1]);
int Fday = Int32.Parse(Fwords[2]);
//
string[] Swords = SecoundDate.Split('/');
int Syear = Int32.Parse(Swords[0]);
int Smonth = Int32.Parse(Swords[1]);
int Sday = Int32.Parse(Swords[2]);
//
int count = ((Fyear - Syear) * 12) + (Fmonth - Smonth) + 1;
return count;

}

h.gheidrlou
پنج شنبه 24 اردیبهشت 1394, 14:19 عصر
مهندس جان خیلی شرمند ه ام کردی
تست میکنم اگر مشکلی بود روش کار میکنم انشاله جواب میده
بازهم تشکر

h.gheidrlou
شنبه 26 اردیبهشت 1394, 22:58 عصر
سلام مهندس حان
تشکر از لطف شما
مبحثی که کدش را برام لطف کردید چیه؟میخوام مطالعه کنم

Latifi
یک شنبه 27 اردیبهشت 1394, 09:14 صبح
سلام دوست عزیز
مشکل حل شد!
من یه سورس دارم که کاملا تفاضل دو تاریخ رو میده
اگه خواستن بگین

h.gheidrlou
چهارشنبه 30 اردیبهشت 1394, 16:20 عصر
تشکرلطیفی جان
تفاضل دوتاریخ ساده است چون تابع اماده خودش داره