View Full Version : کم کردن دو تاریخ شمسی از هم
mohsen_zelzela00
دوشنبه 22 آبان 1391, 12:36 عصر
با عرض سلام خدمت اساتید محترم
من دارم رو یه پروژه کار می کنم که زمانی که کاربر یک درخواست ثبت می کنه تاریخ و ساعت ارسال درخواست رو ثبت می کنم و زمانی که کار اون درخواست تمام شود زمان و ساعت اتمام کار رو هم ذخیره می کنم . و از طرف دیگر در یک جدول دیگر که از دو فیلد(مثلاً) تاریخ و تعداد ساعت کاری است تعداد ساعات کاری هر روز رو ذخیره می کنیم. مثلاً به صورت زیر
تاریخ تعداد ساعت
91/01/01 8
91/01/02 8
.
.
.
91/08/20 8
91/08/21 8
91/08/22 6
حال یک درخواست مثلاً در تاریخ 91/08/20 و ساعت 8:00 ثبت شده است و در تاریخ 91/08/22 ساعت 12:15 تمام شده است حال من می خواهم با توجه به جدول بالا و تاریخ و زمان ثبت و تاریخ و زمان پایان(تاریخ و ساعت به صورت دوفیلد جدا از هم ذخیره می شود) تعداد ساعات کار روی این درخواست کار را محاسبه کنم ممنون میشم اساتید محترم راهنمایی کنند.
hamid-nic
دوشنبه 22 آبان 1391, 13:33 عصر
از فلید نوع datetime استفاده کنید مقادیر را قبل از ثبت در بانک به میلادی تبدیل و سپس ثبت کنید و در هنگام خواندن هم به شمسی تبدیل کنید . فیلد datetime هم تاریخ و هم ساعت را نگه می دارد . برای خواندن و یا تبدیل می توانید از function در همون sql اقدام کنید . در این صورت با توابع کار با تاریخ و زمان هم خیلی سریع کارتون راه می افته .
موفق باشید.
mohsen_zelzela00
دوشنبه 22 آبان 1391, 13:49 عصر
از فلید نوع datetime استفاده کنید مقادیر را قبل از ثبت در بانک به میلادی تبدیل و سپس ثبت کنید و در هنگام خواندن هم به شمسی تبدیل کنید . فیلد datetime هم تاریخ و هم ساعت را نگه می دارد . برای خواندن و یا تبدیل می توانید از function در همون sql اقدام کنید . در این صورت با توابع کار با تاریخ و زمان هم خیلی سریع کارتون راه می افته .
موفق باشید.
این سیستم چون چند وقتی هست داره کار می کنه و متعلق به یه شرکت دیگه هست و من فقط یه سری قابلیت دارم بهش اضافه می کنم این کار واسم مقدور نیست آیا این کاری که گفتم غیر قابل انجام است؟؟
hamid-nic
دوشنبه 22 آبان 1391, 14:19 عصر
حال من می خواهم با توجه به جدول بالا و تاریخ و زمان ثبت و تاریخ و زمان پایان(تاریخ و ساعت به صورت دوفیلد جدا از هم ذخیره می شود) تعداد ساعات کار روی این درخواست کار را محاسبه کنم
از جدول بالا برای چی دیگه ؟
مگه ساعت و تاریخ ارسال و ساعت و تاریخ اتمام کار را ندارید ؟ خوب همین کافی است . استفاده از این جدول به چه معناست ؟
mohsen_zelzela00
دوشنبه 22 آبان 1391, 14:42 عصر
ببینید مثلاٌ من میگم که تاریخ 20/08/91 میشه شنبه پس میشه هشت ساعت کار، روز 91/08/21 میشه یک شنبه و6 ساعت کار و مثلاً 91/08/22 میشه دوشنبه پس 8 ساعت کار حال اگر بخواهیم محاسبات رو انجام بدم میگم که کار ساعت 8 روز 20 اومده پس 8 ساعت از روز 20ام و + 6 ساعت روز 21ام میشه +4:15 دقیقه روز 21ام که این درخواست جمعاً 18:15 ساعت این کار در شرکت مونده.(البته در این جدول از ساعت تا ساعت هم داریم)
hamid-nic
دوشنبه 22 آبان 1391, 14:52 عصر
چرا روز 21 ام را یه بار 6 ساعت حساب می کنی دوباره بعد یه 4:15 هم بهش اضافه می کنی ؟
آیا برایتان مقدور است که به جای اینکه تعداد ساعت ذخیره کنید بیابید همون مقدار را به صورت دقیقه وارد کنید مثلا 8 ساعت را بصورت 480 وارد کنید در نهایت با جمع ستون هایی که مورد نظر است تعداد دقیقه کل کار را بدست آورید سپس به ساعت تبدیل کنید .
mohsen_zelzela00
دوشنبه 22 آبان 1391, 14:58 عصر
چرا روز 21 ام را یه بار 6 ساعت حساب می کنی دوباره بعد یه 4:15 هم بهش اضافه می کنی ؟
آیا برایتان مقدور است که به جای اینکه تعداد ساعت ذخیره کنید بیابید همون مقدار را به صورت دقیقه وارد کنید مثلا 8 ساعت را بصورت 480 وارد کنید در نهایت با جمع ستون هایی که مورد نظر است تعداد دقیقه کل کار را بدست آورید سپس به ساعت تبدیل کنید .
روز21ام رو مثلاً گفتم 6 ساعت کاری است و اون 4:15 مربوط به روز 22ام است چون کار ساعت 12:15 تمام شده پس من 4:15 رو براش در نظر گرفتم.
اگه کار منو بتونه راحن بکنه بله می تونم به دقیقه تبدیل کنم .
hamid-nic
دوشنبه 22 آبان 1391, 23:23 عصر
خوب حله دیگه دوست عزیز با این کار شما با یک فـیلتر مثلا بر اساس یک ماه خاص (مثلاً از 1391/01/01 تا 1391/01/30 )تمام رکورد های مربوط به اون ماه را بدست می آورید سپس با جمع ستون دقایق کار در هر روز مدت کلی را بصورت دقیقه بدست می آوری بعد می تونی برای کار های دیگه به ساعت تبدیل کنید .
baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 09:46 صبح
من دو روش بهتون پیشنهاد می کنم ...
یکی اینکه خودتون یه تابع بنویسید ... (البته شاید اگه بگردید پیدا کنید) که اختلاف دوتا تاریخ رو حساب کنه اونا هم معمولا تاریخ ها رو به یه واحدی تبدیل می کنن ... مثالا میگن 1391/01/02 یه عددی هست به شکل 1391*365 + 1*31 + 2 و همچنین اونیکی تاریخ بعد اختلاف رو حساب می کنند ... البته محاسبه ماه های 30 و 31 و 29 و همجنین سال کبیسه رو هم باید خودتون انجام بدید.
اما روش دوم اینکه تاریخ ها رو به میلادی تبدیل کنید که البته این خیلی راحته چون یه عالمه تابع برای اینکار هست ... بعد از Datediff خود SQL برای بدست آوردن اختلاف بین این دو تا تاریخ میلادی استفاده کنید.
mohsen_zelzela00
سه شنبه 23 آبان 1391, 09:53 صبح
من دو روش بهتون پیشنهاد می کنم ...
یکی اینکه خودتون یه تابع بنویسید ... (البته شاید اگه بگردید پیدا کنید) که اختلاف دوتا تاریخ رو حساب کنه اونا هم معمولا تاریخ ها رو به یه واحدی تبدیل می کنن ... مثالا میگن 1391/01/02 یه عددی هست به شکل 1391*365 + 1*31 + 2 و همچنین اونیکی تاریخ بعد اختلاف رو حساب می کنند ... البته محاسبه ماه های 30 و 31 و 29 و همجنین سال کبیسه رو هم باید خودتون انجام بدید.
اما روش دوم اینکه تاریخ ها رو به میلادی تبدیل کنید که البته این خیلی راحته چون یه عالمه تابع برای اینکار هست ... بعد از Datediff خود SQL برای بدست آوردن اختلاف بین این دو تا تاریخ میلادی استفاده کنید.
آیا توی خود SQL تابع تا کتابخونه ای هست که بتونم توی Query خودم تاریخ ها را به میلادی تبدیل کنم؟
baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 11:06 صبح
نه نیست ... اما اگه جستجو کنید Function هاش به صورت نوشته شده هست که بتونید به بانکتون اضافه کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.