PDA

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



reza4359
دوشنبه 08 تیر 1394, 08:03 صبح
سلام دوستان من میخوام وقتی تاریخ شروع رو دادم به صورت خودکار با کلیک روی maskedtextbox تاریخ پایان رو بهم بده یعنی یک فرد وقتی میخواد مثلا دور روز مرخصی بگیره این تاریخ رو که بهش میدیم 94/4/7 دو روز بعد رو محاسبه کنه و 94/4/9 رو بهمون بده
حالا راه حلش چیه ؟
ممنون

sempay_ninjutsu
دوشنبه 08 تیر 1394, 08:38 صبح
سلام دوستان من میخوام وقتی تاریخ شروع رو دادم به صورت خودکار با کلیک روی maskedtextbox تاریخ پایان رو بهم بده یعنی یک فرد وقتی میخواد مثلا دور روز مرخصی بگیره این تاریخ رو که بهش میدیم 94/4/7 دو روز بعد رو محاسبه کنه و 94/4/9 رو بهمون بده
حالا راه حلش چیه ؟
ممنون
تاریخ اولتو به میلادی تبدیل کن بعد با استفاده از متد addday دو روز به اون اضافه کن بعد دوباره به شمسی تبدیل کن.

DateTime dt = DateTime.Now;
DateTime newTime=dt.AddDays(2);

محمد رضا فاتحی
دوشنبه 08 تیر 1394, 09:06 صبح
با اجازه راه حل ساده تر
PersianCalendar pc = new PersianCalendar(); DateTime dt=DateTime.Now.AddDays(3);
string date = pc.GetYear(dt) + "/" + pc.GetMonth(dt) + "/" + pc.GetDayOfMonth(dt);

reza4359
دوشنبه 08 تیر 1394, 10:29 صبح
با اجازه راه حل ساده تر
PersianCalendar pc = new PersianCalendar(); DateTime dt=DateTime.Now.AddDays(3);
string date = pc.GetYear(dt) + "/" + pc.GetMonth(dt) + "/" + pc.GetDayOfMonth(dt);

ممنون و تشکر از جوابتون حالا این قسمت DateTime dt=DateTime.Now.AddDays تاریخ جاری رو به ما میده اگه بخوایم خودمون تاریخ به دلخواه بزنیم باید چه کار کرد؟

reza4359
دوشنبه 08 تیر 1394, 16:18 عصر
دوستان کسی نیست بلد باشه؟

reza4359
دوشنبه 08 تیر 1394, 17:02 عصر
دوستان میخوام به این صورت باشه
132732
داخل کادر صفر تعداد روزی که میخواد اضافه بشه و داخل کادر دومی تاریخ رو میزنیم و با کلیک بر روی تکس باکس سومی تاریخی که اضافه شده را باید نمایش بده

Mahmoud Zaad
دوشنبه 08 تیر 1394, 17:15 عصر
سلام

--------------------------------------------- ویرایش

از تابع زیر استفاده کنید.
private string AddDayToShamsiDate(string tarikh, double days)
{
string year = tarikh.Substring(0, 4);
string month = tarikh.Substring(5, 2);
string day = tarikh.Substring(8, 2);

//تبدیل تاریخ شمسی به میلادی
PersianCalendar pc = new PersianCalendar();
DateTime dt = pc.ToDateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day), 0, 0, 0, 0);

//افزودن روزهای مورد نظر به تاریخ میلادی
DateTime _newDate = dt.AddDays(days);

//تبدیل تاریخ میلادی به شمسی
string _result = "";
_result += pc.GetYear(_newDate).ToString("0000");
_result += "/";
_result += pc.GetMonth(_newDate).ToString("00");
_result += "/";
_result += pc.GetDayOfMonth(_newDate).ToString("00");
return _result;
}

نحوه استفاده: textBox1.Text=AddDayToShamsiDate("1394/04/08", 23);

davidrobert
دوشنبه 08 تیر 1394, 17:43 عصر
سلام دوستان من میخوام وقتی تاریخ شروع رو دادم به صورت خودکار با کلیک روی maskedtextbox تاریخ پایان رو بهم بده یعنی یک فرد وقتی میخواد مثلا دور روز مرخصی بگیره این تاریخ رو که بهش میدیم 94/4/7 دو روز بعد رو محاسبه کنه و 94/4/9 رو بهمون بده
حالا راه حلش چیه ؟
ممنون
شما تاریخ رو تو دیتابیس ذخیره میکنید و نوع فیلد شما برای تاریخ چه هستشئ چون اگه بخواهید تاریخ رو از دیتابیس هم مقایسه کنید باز با مشکل بر خورد میکنید چون در تاریخ میلادی ماه دوم 28 روزه هستش و همین طور در ماه 4 روم و نوع فیلد شما date باشه تاریخ شمسی ذخیره میشه ولی وقتی به تاریخ ماه 2 و 4 رو میرسه که 28 روزه هستش در میلادی ولی شمسی 31 روزه برنامه خطا میده چون سیستم میگه این رشته هستش و ذخیره نمیکنه در فیلد نوع date و از طرف دیگه نمی تونید مقایسه کنید برای اینکه تو کارتون پیش ببرید اگه دیتابیس ذخیره میکنید بیاد از تاریخ شروع 2 تا فیلد در دیتابیس و از تاریخ پایان 2 تا نوع بسازید شمسی رو از نوع nvarchar قرار بدید و میلادی رو از نوع date وقتی میلادی وارد میشه برای شروع به طور مخفی میلادی تبدیل میشه و وقتی تاریخ پایان میلادی حساب شود تاریخ شمسی رو نمایش بده بدون هیچ ایرادی و شخص کاربر فکر میکنه تاریخ شمسی داره مقایسه میشه ولی در صورتی تاریخ میلادی مخفی یانه عملیات روش پیاده میشه.

محمد رضا فاتحی
سه شنبه 09 تیر 1394, 10:24 صبح
الان دقیقا مشکلتون کجاست؟

reza4359
یک شنبه 14 تیر 1394, 07:28 صبح
سلام

--------------------------------------------- ویرایش

از تابع زیر استفاده کنید.
private string AddDayToShamsiDate(string tarikh, double days)
{
string year = tarikh.Substring(0, 4);
string month = tarikh.Substring(5, 2);
string day = tarikh.Substring(8, 2);

//تبدیل تاریخ شمسی به میلادی
PersianCalendar pc = new PersianCalendar();
DateTime dt = pc.ToDateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day), 0, 0, 0, 0);

//افزودن روزهای مورد نظر به تاریخ میلادی
DateTime _newDate = dt.AddDays(days);

//تبدیل تاریخ میلادی به شمسی
string _result = "";
_result += pc.GetYear(_newDate).ToString("0000");
_result += "/";
_result += pc.GetMonth(_newDate).ToString("00");
_result += "/";
_result += pc.GetDayOfMonth(_newDate).ToString("00");
return _result;
}

نحوه استفاده: textBox1.Text=AddDayToShamsiDate("1394/04/08", 23);

ببخشید با تغییر کدوم قسمت میتونیم به طور مثال تاریخ 94/4/10 تا 94/4/10 رو یک روز محاسبه کنه؟
یعنی یک روز رو از تاریخ 94/4/10 تا 94/4/11 محاسبه نکنه
ممنون

Mahmoud Zaad
یک شنبه 14 تیر 1394, 09:06 صبح
ببخشید با تغییر کدوم قسمت میتونیم به طور مثال تاریخ 94/4/10 تا 94/4/10 رو یک روز محاسبه کنه؟
یعنی یک روز رو از تاریخ 94/4/10 تا 94/4/11 محاسبه نکنه
ممنون

قسمت زیر رو تغییر بدید:
//افزودن روزهای مورد نظر به تاریخ میلادی DateTime _newDate = dt.AddDays(days);



به

DateTime _newDate = dt.AddDays(days - 1);

jamal_ch
یک شنبه 14 تیر 1394, 12:41 عصر
public string ShamsiDateAddDay( int tarykhShamsiYear,int tarykhShamsiMonth,string tarykhShamsiDay,int AddedDays)
{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime inDate = default(DateTime);
DateTime outDate = default(DateTime);
string result = null;

inDate = pc.ToDateTime(tarykhShamsiYear, tarykhShamsiMonth, tarykhShamsiDay,0, 0,0, 0);
outDate = pc.AddDays(inDate, AddedDays);

result = (pc.GetYear(outDate) > 9 ? pc.GetYear(outDate).ToString() : "0" + pc.GetYear(outDate)) + "/" + (pc.GetMonth(outDate) > 9 ? pc.GetMonth(outDate).ToString() : "0" + pc.GetMonth(outDate)) + "/" + (pc.GetDayOfMonth(outDate) > 9 ? pc.GetDayOfMonth(outDate).ToString() : "0" + pc.GetDayOfMonth(outDate));

return result;

}