PDA

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



mitra285
یک شنبه 18 اردیبهشت 1390, 12:17 عصر
با سلام خدمت دوستان عزیز

کارمندی ساعت 22:30 شب روز 12/02/1390 وارد شرکت می شود و ساعت 06:30 صبح 13/02/1390 از شرکت خارج می شود اختلاف این دو زمان میادن دو روز متفاوت را به چه صورتی می توان استخراج نمود.

یعنی کارکرد این کارمند به میزان 8:00 ساعت را دریافت نمود.

barbodsoft.com
یک شنبه 18 اردیبهشت 1390, 13:17 عصر
Imports System.Globalization.PersianCalendar

Public Class Form1

Public Function ShamsiToMiladi(ByVal SDate As String, ByVal h As Integer, ByVal mi As Integer) As String
Dim pc As New Globalization.PersianCalendar
ShamsiToMiladi = Nothing
Dim Tarikh
Tarikh = Split(SDate, "/")
Dim dateOut As DateTime = (pc.ToDateTime(Tarikh(0), Tarikh(1), Tarikh(2), h, mi, 0, 0))
Return dateOut
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim DateM1 As Date = ShamsiToMiladi("1390/02/12", 22, 30) 'معادل میلادی تاریخ وارد شده حساب می شود ShamsiToMiladi از طریق تابع
Dim DateM2 As Date = ShamsiToMiladi("1390/02/14", 6, 20)

Dim Y As Integer = DateDiff(DateInterval.Year, DateM1, DateM2) ' اختلاف تاریخ به سال محاسبه می شود
DateM1 = DateM1.AddYears(Y) 'اختلاف سال به DateBrith اضافه می شود
Dim M As Integer = DateDiff(DateInterval.Month, DateM1, DateM2) ' اختلاف ماه محاسبه می شود
DateM1 = DateM1.AddMonths(M) ' اختلاف ماه به DateBrith اضافه می شود
Dim D As Integer = DateDiff(DateInterval.Day, DateM1, DateM2) ' اختلاف روز محاسبه می شود
DateM1 = DateM1.AddDays(D)
Dim H As Integer = DateDiff(DateInterval.Hour, DateM1, DateM2) ' اختلاف روز محاسبه می شود
DateM1 = DateM1.AddHours(H)
Dim mi As Integer = DateDiff(DateInterval.Minute, DateM1, DateM2) ' اختلاف روز محاسبه می شود
MsgBox("DateDiff is :" & Y & "/" & M & "/" & D & " " & H & ":" & mi)
End Sub
End Class

mitra285
یک شنبه 18 اردیبهشت 1390, 13:27 عصر
ممنون از پاسخ شما
اما من تاریحی ندارم که مبنا قرار بدم. اصلا بذارید اینجوری بگم شاید بهتر باشه. و بتونید بهتر راهنماییم کنید.

ببنید شما فرض کن دو تا کست باکس داریم تو یه فرم تو اولی وارد می کنیم 22:30 و تو دومی 06:30 حالا اختلاف این دو رو تو تکست باکس سوم به صورت 08:00 نمایش بده .

با تشکر از شما

barbodsoft.com
یک شنبه 18 اردیبهشت 1390, 14:09 عصر
شما فقط باید این دو خط رو مقدار دهی کنی. خط اول شروع تاریخ و دومی پایان تاریخ


Dim DateM1 As Date = ShamsiToMiladi("1390/02/12", 22, 30) 'معادل میلادی تاریخ وارد شده حساب می شود ShamsiToMiladi از طریق تابع
Dim DateM2 As Date = ShamsiToMiladi("1390/02/14", 6, 20)


مثلا در خط اول این تاریخ مقدار دهی شده "22:30 1390/02/12" شما باید متغییر های رو بجای این اعداد قرار بدی تو کد.

mitra285
یک شنبه 18 اردیبهشت 1390, 14:38 عصر
ممنون اما اگر تو همین تکست باکس ها زمان رو به صورت عادی وارد کنیم یعنی فاصله ای نباشه بین اونها یعنی تو یک روز باشن چه کار باید کرد. یعنی می خوام همه منظوره باشه همه عادی رو حساب کنه و هم اختلاف دو روز رو.
ممنون از وقتی که می زارید.

nowar1352
یک شنبه 18 اردیبهشت 1390, 14:40 عصر
با سلام خدمت دوست عزيز ابتدا 3 تا ليبل بساز و يه دكمه كد هاي زير رو تو رويداد كليك اين دكمه قرار بده
Dim D1 AsDate
Dim D2 AsDate
Label1.Text = "1390/02/12,22:30"
Label2.Text = "1390/02/13,06:30"
D1 = Convert.ToDateTime(Label1.Text)
D2 = Convert.ToDateTime(Label2.Text)
'MessageBox.Show((D2 - D1).ToString)
Label3.Text = (D2 - D1).ToString

جواب خواهي گرفت

mhmoein
دوشنبه 19 اردیبهشت 1390, 02:23 صبح
با سلام

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

موفق باشی

mehdis86
شنبه 11 آذر 1391, 11:47 صبح
با سلام خدمت دوست عزيز ابتدا 3 تا ليبل بساز و يه دكمه كد هاي زير رو تو رويداد كليك اين دكمه قرار بده
Dim D1 AsDate
Dim D2 AsDate
Label1.Text = "1390/02/12,22:30"
Label2.Text = "1390/02/13,06:30"
D1 = Convert.ToDateTime(Label1.Text)
D2 = Convert.ToDateTime(Label2.Text)
'MessageBox.Show((D2 - D1).ToString)
Label3.Text = (D2 - D1).ToString

جواب خواهي گرفت

عزیزم
بنده برای تاریخ زیر تست کردم با مشکل مواجه شدم
حالا باید چه کار کرد ؟
d1 = Convert.ToDateTime("1390/02/30,22:30")
d2 = Convert.ToDateTime("1390/02/31,07:30")

خودم جواب خودمو با همکاری یکی از دوستام میدم
این کارو بکنید بهتره
Dim y As Integer = 1391
Dim m As Integer = 2
Dim d As Integer = 30
Dim h As Integer = 22
Dim min As Integer = 25
Dim pc As New PersianCalendar()
Dim dt As DateTime = pc.ToDateTime(y, m, d, h, min, 0, _
0)
y = 1391
m = 2
d = 31
h = 7
min = 25
Dim dt1 As DateTime = pc.ToDateTime(y, m, d, h, min, 0, _
0)
Dim d1 As TimeSpan = dt1.Subtract(dt)

MsgBox(d1.Hours)

یاشار رضایی نسب
سه شنبه 15 اسفند 1391, 23:13 عصر
Imports System.Globalization.PersianCalendar

Public Class Form1

Public Function ShamsiToMiladi(ByVal SDate As String, ByVal h As Integer, ByVal mi As Integer) As String
Dim pc As New Globalization.PersianCalendar
ShamsiToMiladi = Nothing
Dim Tarikh
Tarikh = Split(SDate, "/")
Dim dateOut As DateTime = (pc.ToDateTime(Tarikh(0), Tarikh(1), Tarikh(2), h, mi, 0, 0))
Return dateOut
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim DateM1 As Date = ShamsiToMiladi("1390/02/12", 22, 30) 'معادل میلادی تاریخ وارد شده حساب می شود ShamsiToMiladi از طریق تابع
Dim DateM2 As Date = ShamsiToMiladi("1390/02/14", 6, 20)

Dim Y As Integer = DateDiff(DateInterval.Year, DateM1, DateM2) ' اختلاف تاریخ به سال محاسبه می شود
DateM1 = DateM1.AddYears(Y) 'اختلاف سال به DateBrith اضافه می شود
Dim M As Integer = DateDiff(DateInterval.Month, DateM1, DateM2) ' اختلاف ماه محاسبه می شود
DateM1 = DateM1.AddMonths(M) ' اختلاف ماه به DateBrith اضافه می شود
Dim D As Integer = DateDiff(DateInterval.Day, DateM1, DateM2) ' اختلاف روز محاسبه می شود
DateM1 = DateM1.AddDays(D)
Dim H As Integer = DateDiff(DateInterval.Hour, DateM1, DateM2) ' اختلاف روز محاسبه می شود
DateM1 = DateM1.AddHours(H)
Dim mi As Integer = DateDiff(DateInterval.Minute, DateM1, DateM2) ' اختلاف روز محاسبه می شود
MsgBox("DateDiff is :" & Y & "/" & M & "/" & D & " " & H & ":" & mi)
End Sub
End Class


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

zahedi121
چهارشنبه 16 اسفند 1391, 01:39 صبح
سلام
رویداد کلیک سورسی که ازش نقل قول کردید را در رویداد tick تایمر بنویسد وخاصیت text تکست باکستون را هم برابر گزینه داخل مسج باکس بگذارید .
ضمنا شما باید یک مقدار DateDiff(DateInterval.second, DateM1, DateM2) هم مانند سال و ماه و ساعت (باهمون فرمت) اضافه کنید که ثانیه را به شما بدهد.

موفق باشید

یاشار رضایی نسب
چهارشنبه 16 اسفند 1391, 01:55 صبح
سلام
رویداد کلیک سورسی که ازش نقل قول کردید را در رویداد tick تایمر بنویسد وخاصیت text تکست باکستون را هم برابر گزینه داخل مسج باکس بگذارید .
ضمنا شما باید یک مقدار DateDiff(DateInterval.second, DateM1, DateM2) هم مانند سال و ماه و ساعت (باهمون فرمت) اضافه کنید که ثانیه را به شما بدهد.

موفق باشید


Imports System.Globalization.PersianCalendar
Public Class Form1
Public Function ShamsiToMiladi(ByVal SDate As String, ByVal h As Integer, ByVal mi As Integer) As String
Dim pc As New Globalization.PersianCalendar
ShamsiToMiladi = Nothing
Dim Tarikh
Tarikh = Split(SDate, "/")
Dim dateOut As DateTime = (pc.ToDateTime(Tarikh(0), Tarikh(1), Tarikh(2), h, mi, 0, 0))
Return dateOut
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim DateM1 As Date = DateTime.Now
Dim DateM2 As Date = ShamsiToMiladi("1391/12/01", 11, 35)

Dim Y As Integer = DateDiff(DateInterval.Year, DateM1, DateM2)
DateM1 = DateM1.AddYears(Y)

Dim M As Integer = DateDiff(DateInterval.Month, DateM1, DateM2)
DateM1 = DateM1.AddMonths(M)

Dim D As Integer = DateDiff(DateInterval.Day, DateM1, DateM2)
DateM1 = DateM1.AddDays(D)

Dim H As Integer = DateDiff(DateInterval.Hour, DateM1, DateM2)
DateM1 = DateM1.AddHours(H)

Dim mi As Integer = DateDiff(DateInterval.Minute, DateM1, DateM2)
DateM1 = DateM1.AddMinutes(mi)

Dim se As Integer = DateDiff(DateInterval.Second, DateM1, DateM2)
DateM1 = DateM1.AddSeconds(se)

TextBox1.Text = Y
TextBox2.Text = M
TextBox3.Text = D
TextBox4.Text = H
TextBox5.Text = mi
TextBox6.Text = se

End Sub

End Class

من اینجوری تغییر دادم ولی داره زمان و کم میکنه بجای اینکه افزایش بده ، مخم رد داده نمیتونم تمرکز کنم و عیبشو پیدا کنم !

zahedi121
چهارشنبه 16 اسفند 1391, 07:17 صبح
سلام
جای m1 , m2 را عوض کنید.
در تابع shamsi to miladi اون 11 و 35 چیه ؟!
تایمر هم که ندارید! چطوری کم میشه ؟! با کد بالا باید فقط یکبار متن تکس باکسها عوض بشه .

یک بار از اول اصلا سورس را بگذارید کنار ،ببینید چکار می خواهید بکنید. بعد بگردید ببینید کجای سورس به دردتون میخوره استفاده کنید ( فقط شکل صحیح توابع را از سورس نگاه کنید) اینطوری که از سورسی که برای یک کاری ساخته شده میخواهید یک تکه اش را عوض کنید متوجه نمی شوید در ادامه چی بر سر متغیراتون میاد و یا حداقل کنار هر خط سورس برای خودتون بنویسید این خط چکار میکنه و خط به خط بیایید پایین تا به هدفتون برسید.

تاپیک های دیگری هم در این خصوص هست که تابعهای دیگری را مثال زدند.

موفق باشید.

یاشار رضایی نسب
چهارشنبه 16 اسفند 1391, 11:39 صبح
سلام
جای m1 , m2 را عوض کنید.
در تابع shamsi to miladi اون 11 و 35 چیه ؟!
تایمر هم که ندارید! چطوری کم میشه ؟! با کد بالا باید فقط یکبار متن تکس باکسها عوض بشه .

یک بار از اول اصلا سورس را بگذارید کنار ،ببینید چکار می خواهید بکنید. بعد بگردید ببینید کجای سورس به دردتون میخوره استفاده کنید ( فقط شکل صحیح توابع را از سورس نگاه کنید) اینطوری که از سورسی که برای یک کاری ساخته شده میخواهید یک تکه اش را عوض کنید متوجه نمی شوید در ادامه چی بر سر متغیراتون میاد و یا حداقل کنار هر خط سورس برای خودتون بنویسید این خط چکار میکنه و خط به خط بیایید پایین تا به هدفتون برسید.

تاپیک های دیگری هم در این خصوص هست که تابعهای دیگری را مثال زدند.

موفق باشید.

من تایمر هم اضافه کردم ولی باز هم جواب نگرفتم ، جای m1 , m2 رو هم با هم عوض کردم ولی باز هم نشد ، اون 11 و 35 مربوط به ساعت و دقیقه میشه .

Imports System.Globalization.PersianCalendar
Public Class Form1
Public Function ShamsiToMiladi(ByVal SDate As String, ByVal h As Integer, ByVal mi As Integer) As String
Dim pc As New Globalization.PersianCalendar
ShamsiToMiladi = Nothing
Dim Tarikh
Tarikh = Split(SDate, "/")
Dim dateOut As DateTime = (pc.ToDateTime(Tarikh(0), Tarikh(1), Tarikh(2), h, mi, 0, 0))
Return dateOut
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim DateM1 As Date = DateTime.Now
Dim DateM2 As Date = ShamsiToMiladi("1391/12/01", 11, 35)

Dim Y As Integer = DateDiff(DateInterval.Year, DateM1, DateM2)
DateM1 = DateM1.AddYears(Y)

Dim M As Integer = DateDiff(DateInterval.Month, DateM1, DateM2)
DateM1 = DateM1.AddMonths(M)

Dim D As Integer = DateDiff(DateInterval.Day, DateM1, DateM2)
DateM1 = DateM1.AddDays(D)

Dim H As Integer = DateDiff(DateInterval.Hour, DateM1, DateM2)
DateM1 = DateM1.AddHours(H)

Dim mi As Integer = DateDiff(DateInterval.Minute, DateM1, DateM2)
DateM1 = DateM1.AddMinutes(mi)

Dim se As Integer = DateDiff(DateInterval.Second, DateM1, DateM2)
DateM1 = DateM1.AddSeconds(se)

TextBox1.Text = Y
TextBox2.Text = M
TextBox3.Text = D
TextBox4.Text = H
TextBox5.Text = mi
TextBox6.Text = se

End Sub
End Class

zahedi121
چهارشنبه 16 اسفند 1391, 12:43 عصر
سلام
کجا جای تاریخ ها را عوض کردید؟!
سورستون را اصلاح کردم ، ببین منظورتون همینه :

یاشار رضایی نسب
چهارشنبه 16 اسفند 1391, 16:56 عصر
سلام
کجا جای تاریخ ها را عوض کردید؟!
سورستون را اصلاح کردم ، ببین منظورتون همینه :

متاسفانه ورژن دات نت من 2008 ،ارور می ده .

mohsen22
جمعه 30 فروردین 1392, 21:09 عصر
سلام . ضمن تشکر از همه
من دو تاریخ و ساعت همزمان با هم دارم
میخوام اختلاف روز و ساعت دقیق هر دو تاریخ رو محاسبه کنه
مثلا: اختلاف= 1 روز و 5 ساعت و 20 دقیقه
لطفا بنده رو هم راهنمایی بفرمایید (ذکر یک مثال هم درvb کمک بزرگی به بنده میکنه )
مرسی
لازم به توضیحه که تاریخهای من شمسی هستش

mohsen22
چهارشنبه 04 اردیبهشت 1392, 21:24 عصر
کسی نیست مرا یاری کند؟