رفتن به مطلب
  • 0

محاسبه ساعت بین دو تاریخ!


hamidjalali

سوال

سلام

در حال نوشتن برنامه ای هستم که بتونم مدت ساعت بین دو تاریخ و ساعت رو بهم بده

کدش رو نوشتم و کار هم میده

Sub HoursBetween(StartDate As String, StartTime As String, _
  EndDate As String, EndTime As String) As Int
    Dim s, e As Long
  s = ParseDateAndTime(StartDate, StartTime)
  e = ParseDateAndTime(EndDate, EndTime)
  Return (e - s) / DateTime.TicksPerHour

و

Sub ParseDateAndTime(d As String, t As String) As Long
DateTime.DateFormat= "yyyy/MM/dd"
DateTime.TimeFormat="HH:mm:ss"
  Dim dd = DateTime.DateParse(d), tt = DateTime.TimeParse(t) As Long
  tt = (tt + DateTime.TimeZoneOffset * DateTime.TicksPerHour) Mod DateTime.TicksPerDay
  Dim total As Long
  total = dd + tt +  (DateTime.GetTimeZoneOffsetAt(dd) - DateTime.GetTimeZoneOffsetAt(dd + tt)) _
     * DateTime.TicksPerHour
  Return total
End Sub

ولی میخوام محاسبش اینطوری باشه که مدت ساعت در طی هفته قبل رو بهم بده!!

مثال :تاریخ الان "1393/10/02"

HoursBetween("1393/09/20", "05:00:00" , "1393/09/21", "20:00:00") >>15

HoursBetween("1393/09/30", "16:00:00" , "1393/09/30", "20:00:00") >>4

HoursBetween("1393/09/01", "08:00:00" , "1393/10/01", "13:00:00") >>5

فرض کنید 500 تا رکورد توی دیتا بیس هست و میخوام مقدار ساعات کاکرد یک نفر رو در هفته پیشش رو بده

موندم شرط رو چطوری بنویسم!؟ میخوام عدد 9 رو برگردونه توی مثال بالا!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

15 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام

چیزی که دوستمئن میخاد توی سی شارپ با کوئری Between و Sum به راحتی انجام میشه.

ولی بنده توی بیسیک هنوز دنبالش نرقتم شاید اینجا هم بشه استفاده کرد.

اگه این کوئری رو پیدا کردید کل کار اینه که ابتدا کوئری Between رو به دیتابیس ارسال و مقادیر رو دریافت کنید و بعد داده های دریافتی رو Sum با همون جمع کنبد.

میتونید توی نت و سایت اصلی گشت و گزار کنید شاید پیدا کردید.اگه هم نشد بنده خودم حتما پیدا می کنم به وقتش.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

چی شده یهو تو یه روز دو نفر دنبال روز شمار هستند *تعجب3* *خنده*

این تاپیک مشابه : http://answercenter.ir/thread955-2.html

استاد حقیقی پاسخ دادند.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

dim a,b,c as int

a= second(now)

b= minute (now)

c= ساعت

خلاصه با کلیک اول همه تو یه لیبل یا جایی زمانی که کلیک کردین ثبت میشهو کلیک دوم زمان جدید

بعد شما باید اینارو از طریق رشته از هم جدا کنید و همه چیزو تبدیل به ثانیه کنید و در آخر همشو تبدیل کنید به ساعت و دقیقه و ثانیه

خیلی برنامه راحتیه

البته با ویژال بیسیک

لینک ارسال
به اشتراک گذاری در سایت های دیگر

dim a,b,c as int

a= second(now)

b= minute (now)

c= ساعت

خلاصه با کلیک اول همه تو یه لیبل یا جایی زمانی که کلیک کردین ثبت میشهو کلیک دوم زمان جدید

بعد شما باید اینارو از طریق رشته از هم جدا کنید و همه چیزو تبدیل به ثانیه کنید و در آخر همشو تبدیل کنید به ساعت و دقیقه و ثانیه

خیلی برنامه راحتیه

البته با ویژال بیسیک

متوجه نشدم!!؟ میشه بیشتر توضیح بدید!؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

یا مثالی که نوشتی و توضیحاتت تناقض داره یا من نفهمیدم.

تو مثال عددا رو چک کن یکم هم درست تر توضیح بده.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون

ببینید من یه جدول دارم توی دیتابیس که دارای 6 تا فیلده

id

userid

StartDate

StartTime

EndDate

EndTime

حالا میخوام مقدار کارکرد یک کاربر در هفته قبل از تاریخ جاری رو بده! متوجه شدید؟

توابع بالا مقدار ساعت کارکرد بین دوتا تاریخ و دو ساعت رو بهم میده ولی میخوام جوری تغییر بدم که بتونم مقدار کارکرد قبل از تاریخ جاری سیستم رو محاسبه کنم

برای مثال توابع بالا الان اگه اینطوری صداش بزنم:

HoursBetween("1393/09/20", "05:00:00" , "1393/09/21", "20:00:00")

عدد 15 رو بالا بهم میدم

حالا موندم چظوری باید شرط بنویسم که بتونم اگه 500 تا رکورد توی دیتا بیس بود، برای یک کاربر محاسبه کنه چند ساعت در هفته قبل کار کرده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

یعنی یک هفته قبل شامل 09/14 تا 09/21 میشه ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون

ببینید من یه جدول دارم توی دیتابیس که دارای 6 تا فیلده

id

userid

StartDate

StartTime

EndDate

EndTime

حالا میخوام مقدار کارکرد یک کاربر در هفته قبل از تاریخ جاری رو بده! متوجه شدید؟

توابع بالا مقدار ساعت کارکرد بین دوتا تاریخ و دو ساعت رو بهم میده ولی میخوام جوری تغییر بدم که بتونم مقدار کارکرد قبل از تاریخ جاری سیستم رو محاسبه کنم

برای مثال توابع بالا الان اگه اینطوری صداش بزنم:

HoursBetween("1393/09/20", "05:00:00" , "1393/09/21", "20:00:00")

عدد 15 رو بالا بهم میدم

حالا موندم چظوری باید شرط بنویسم که بتونم اگه 500 تا رکورد توی دیتا بیس بود، برای یک کاربر محاسبه کنه چند ساعت در هفته قبل کار کرده

توی این مثال که زدی جواب میشه 39 چجوری 15 رو بر می گردونه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

توی این مثال که زدی جواب میشه 39 چجوری 15 رو بر می گردونه؟

درست گفته دیگه. از 5 صبح تا 20 عصر میشه 15 ساعت کارکرد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درست گفته دیگه. از 5 صبح تا 20 عصر میشه 15 ساعت کارکرد

تاریخ روزارم ببین ساعت 5 روز 20 تا ساعت 20 روز 21

لینک ارسال
به اشتراک گذاری در سایت های دیگر

وای ببخشید :دی

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

ببینید این برنامه یک برنامه حضور و غیاب کارکنان هست ( قبلا توی همین انجمن میخواستم کمک بگیرم که کسی کمک نکرد) اینم ینک تاپیک : اینجا

الان میخوام که وقتی مدیر سیستم وارد برنامه میشه بتونه مقدار حضور یک شخص به ساعت در هفته قبل از تاریخ جاری رو نشون بده! دیگه نمیدونم چطوری باید بگم *غمگین*

توی دیتا بیس رکورد های حضور و غیاب ثبت شده

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

ممنون از همه بچه ها از توجهتون - خواهشا اگه میشه کمک کنید چون وقت ندارم و وقتم کمه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به این تابع که برات نوشتم فقط مقدار بدی جواب میده.

مثلا اگه این مقدارا 1393/09/20", "05:00:00" , "1393/09/21", "20:00:00 رو بدی این جوابو میگیری از نوع استرینگ

1day & 15 Houre & 0 minute

تاریخ و ساعت ها رو از نوع استرینگ باید به تابع بدی و جواب رو هم استرینگ بگیری"کلی کارتو راحت کردم دی"

Sub Conter(StartDate As String, EndDate As String, StartTime As String, EndTime As String) As String
   Dim ST(), SD(), ET(), ED(), answer As String
   Dim SDD, STH, STM, EDD, ETH, ETM As Int
   Dim day, hour, minute As Int = 0
   SD = Regex.Split("/", StartDate)
   ED = Regex.Split("/", EndDate)
   ST = Regex.Split(":", StartTime)
   ET = Regex.Split(":", EndTime)
   SDD = SD(2)
   STH = ST(0)
   STM = ST(1)
   EDD = ED(2)
   ETH = ET(0)
   ETM = ET(1)
   Do Until SDD = EDD
       Do Until STH = ETH
           Do Until STM = ETM
               STM = STM + 1
               minute = minute + 1
           Loop
           STH = STH + 1
           hour = hour + 1
       Loop
       SDD = SDD + 1
       day = day + 1
   Loop
   answer = day & " day & " & hour & " Houre & " & minute & " minute"
   Return(answer)
End Sub

سورسشو هم برات میزارم

http://s5.picofile.com/file/8159093026/Exam.rar.html

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوست عزیز ممنون *قلب*

ولی اونی که من میخوام نیست*تعجب3*

برنامه من را دانلود کن و ببین ! دیتا بیس برنامه هم نگاه کن بی زحمت

http://s5.picofile.com/file/8159116426/Hour.zip.html

برنامه الان عدد 22 رو برمیگردونه که من میخوام رکورد آخر دیتابیس چون خارج از یک هفته هست رو محاسبه نکنه! و عدد 8 رو برگردونه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...