PDA

View Full Version : سوال: به دست آوردن روزهای هفته بین دو تاریخ



jafarpalideh
سه شنبه 08 خرداد 1397, 10:03 صبح
با سلام


من یه تاریخ شروع دارم و یه تاریخ پایان . مثلا از الان تا سال 1410 .
میخوام تاریخ تمام روزهای شنبه و چهارشنبه یا هر روز دیگه ای که کاربر بین تاریخ شروع و پایان انتخاب میکنه رو تویه دیتابیس ذخیره کنم (البته به صورت شمسی). (هر کدام از روزها قابل انتخاب می باشد.امکان دارد تمام روزهای هفته انتخاب شود .)


دوستان میتونن راهنمایی کنن ؟ :متعجب::عصبانی++:

mr.sirwan
سه شنبه 08 خرداد 1397, 16:18 عصر
در حالت تئوری میگم، میتونی وقتی تاریخ شروع و پایان رو دریافت کردی، یه حلقه for بذاری و از تاریخ اول شروع کنی و دونه دونه روز اون تاریخها رو چک کنی که ایا شنبه س یا چهارشنبه، یه همچین چیزی:

DateTime start = DateTime.Now, End = DateTime.Now.AddDays(20);
for (DateTime iterator = start; iterator <= End /*or like this DateTime.Compare(iterator, End) <= 0*/; iterator = iterator.AddDays(1))
{
switch (iterator.DayOfWeek)
{
case DayOfWeek.Sunday:
break;
case DayOfWeek.Monday:
break;
case DayOfWeek.Tuesday:
break;
case DayOfWeek.Wednesday:
// insert date to db
break;
case DayOfWeek.Thursday:
break;
case DayOfWeek.Friday:
break;
case DayOfWeek.Saturday:
// insert date to db
break;
default:
break;
}
}

دیگه زحمت تبدیل تاریخ میلادی به شمسی با خودت

jafarpalideh
چهارشنبه 09 خرداد 1397, 15:22 عصر
دستور Switch جواب نمیده . چون Switch فقط یک شرط رو چک میکنه و از حلقه میاد بیرون.

mr.sirwan
چهارشنبه 09 خرداد 1397, 21:13 عصر
متوجه نشدم، یعنی چی فقط یه شرط رو چک میکنه؟ خب فقط وارد case ی میشه که شرطش برقرار باشه، بعدشم بیرون رفتن از حلقه ربطی به سوئیچ نداره، تکرار حلقه اصلا دست سوئیچ نیس که بخواد از حلقه خارج کنه، کدتو قرار بده ببینیم مشکل چیه

danialafshari
چهارشنبه 09 خرداد 1397, 23:32 عصر
دستور Switch جواب نمیده . چون Switch فقط یک شرط رو چک میکنه و از حلقه میاد بیرون.
با سلام
کدشون کاملاً درسته برای تست میتونید خروجی رو در Console مشاهده کنید

DateTime start = DateTime.Now, End = DateTime.Now.AddDays(20);
for (DateTime iterator = start; iterator <= End /*or like this DateTime.Compare(iterator, End) <= 0*/; iterator = iterator.AddDays(1))
{
switch (iterator.DayOfWeek)
{
case DayOfWeek.Sunday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Monday:
break;
case DayOfWeek.Tuesday:
break;
case DayOfWeek.Wednesday:
// insert date to db
break;
case DayOfWeek.Thursday:
break;
case DayOfWeek.Friday:
break;
case DayOfWeek.Saturday:
// insert date to db
break;
default:
break;
}
}

روزهای یک شنبه رو استخراج میکنه که فقط شما باید به شمسی تبدیلش کنید
اگر هم برای دو یا چند روز توی سوئیچ کد WriteLine رو بنویسید اونها رو هم استخراج میکنه
موفق باشید

jafarpalideh
پنج شنبه 10 خرداد 1397, 08:53 صبح
با سلام
کدشون کاملاً درسته برای تست میتونید خروجی رو در Console مشاهده کنید

DateTime start = DateTime.Now, End = DateTime.Now.AddDays(20);
for (DateTime iterator = start; iterator <= End /*or like this DateTime.Compare(iterator, End) <= 0*/; iterator = iterator.AddDays(1))
{
switch (iterator.DayOfWeek)
{
case DayOfWeek.Sunday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Monday:
break;
case DayOfWeek.Tuesday:
break;
case DayOfWeek.Wednesday:
// insert date to db
break;
case DayOfWeek.Thursday:
break;
case DayOfWeek.Friday:
break;
case DayOfWeek.Saturday:
// insert date to db
break;
default:
break;
}
}

روزهای یک شنبه رو استخراج میکنه که فقط شما باید به شمسی تبدیلش کنید
اگر هم برای دو یا چند روز توی سوئیچ کد WriteLine رو بنویسید اونها رو هم استخراج میکنه
موفق باشید
احتمالا من متوجه نمیشم.
منظورم اینه الان اگه کاربر شنبه و دوشنبه و چهارشنبه رو انتخاب کنه , فقط میاد و شنبه رو ثبت میکنه . سراغ دوشنبه و چهارشنبه نمیره

رامین مرادی
پنج شنبه 10 خرداد 1397, 09:42 صبح
احتمالا من متوجه نمیشم.
منظورم اینه الان اگه کاربر شنبه و دوشنبه و چهارشنبه رو انتخاب کنه , فقط میاد و شنبه رو ثبت میکنه . سراغ دوشنبه و چهارشنبه نمیره
دوست عزیز برا این مورد سوییچ درست نیست. سوئیچ به اولین مورد صحیح که رسید با break خارج میشه. شما باید از دستور if به تنهایی استفاده کنید که میشه کد زیر



DateTime start = DateTime.Now, End = DateTime.Now.AddDays(20);
for (DateTime iterator = start; iterator <= End /*or like this DateTime.Compare(iterator, End) <= 0*/; iterator = iterator.AddDays(1))
{
if(iterator.DayOfWeek==DayOfWeek.Sunday)
{
//Insert To Db
}
if(iterator.DayOfWeek==DayOfWeek.Monday)
{
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
}
if(iterator.DayOfWeek==DayOfWeek.Tuesday)
{
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
}
if(iterator.DayOfWeek==DayOfWeek.Wednesday)
{
//Insert To Db
}
if(iterator.DayOfWeek==DayOfWeek.Friday)
{
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
}
if(iterator.DayOfWeek==DayOfWeek.Saturday)
{
//Insert To Db
}
}

danialafshari
پنج شنبه 10 خرداد 1397, 09:53 صبح
درباره switch بیشتر مطالعه کنید
اینم شنبه و دوشنبه و چهارشنبه، switch رو به شکل زیر تغییر بدید:

switch (iterator.DayOfWeek)
{
case DayOfWeek.Sunday:
break;
case DayOfWeek.Monday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Tuesday:
break;
case DayOfWeek.Wednesday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Thursday:
break;
case DayOfWeek.Friday:
break;
case DayOfWeek.Saturday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
default:
break;
}

Mahmoud.Afrad
پنج شنبه 10 خرداد 1397, 10:13 صبح
احتمالا من متوجه نمیشم.
منظورم اینه الان اگه کاربر شنبه و دوشنبه و چهارشنبه رو انتخاب کنه , فقط میاد و شنبه رو ثبت میکنه . سراغ دوشنبه و چهارشنبه نمیره

یک لیست از موارد انتخابی کاربر ایجاد کنید.
در حلقه چک کنید روز درون حلقه ، جزئی از لیست هست یا نه.

رامین مرادی
پنج شنبه 10 خرداد 1397, 10:52 صبح
درباره switch بیشتر مطالعه کنید
اینم شنبه و دوشنبه و چهارشنبه، switch رو به شکل زیر تغییر بدید:

switch (iterator.DayOfWeek)
{
case DayOfWeek.Sunday:
break;
case DayOfWeek.Monday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Tuesday:
break;
case DayOfWeek.Wednesday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Thursday:
break;
case DayOfWeek.Friday:
break;
case DayOfWeek.Saturday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
default:
break;
}

میتونید به صورت زیر هم بنویسید:


switch (iterator.DayOfWeek)
{
case DayOfWeek.Sunday:
break;
case DayOfWeek.Monday:
case DayOfWeek.Wednesday:
case DayOfWeek.Saturday:
Console.WriteLine(iterator.ToString(new DateTimeFormatInfo().ShortDatePattern));
break;
case DayOfWeek.Tuesday:
break;
case DayOfWeek.Thursday:
break;
case DayOfWeek.Friday:
break;
default:
break;
}

mr.sirwan
پنج شنبه 10 خرداد 1397, 11:51 صبح
احتمالا من متوجه نمیشم.
منظورم اینه الان اگه کاربر شنبه و دوشنبه و چهارشنبه رو انتخاب کنه , فقط میاد و شنبه رو ثبت میکنه . سراغ دوشنبه و چهارشنبه نمیره

خب شما ممکنه تو درکش مشکل داشته باشی، ببین هر تاریخ مربوط به یک روز از هفته س دیگه، یه تاریخ که نمیتونه هم شنبه باشه هم چهارشنبه باشه، شما اینجا یه حلقه داری که روز به روز دونه دونه تاریخ هارو چک میکنه و به ترتیب روزای مدنظرت رو تو دیتابیس درج میکنه، طرز کار سوئیچ اینجوریه که به ازای هر بار تکرار حلقه، فقط یک case که شرطش برقرار باشه رو اجرا میکنه
مثلا تاریخ 05/31/2018 پراپرتی DayOfWeekش میشه Thursday و سوئیچ وارد case مربوط به پنجشنه میشه اگه دستوری نوشته شده باشه اجرا میکنه و از بدنه سوئیچ خارج میشه و میره ابتدای حلقه و یک روز رو به iterator اضافه میکنه که میشه 06/01/2018 و دوباره میره داخل بدنه switch اینبار case مربوط به Friday اجرا میشه و...

از این اسونتر نمیشه توضیح داد