PDA

View Full Version : birthday



mehrnoush
یک شنبه 17 شهریور 1387, 16:50 عصر
سلام
کسی میدونه با چه محاسباتی میشه سن دقیق فرد رو در آورد
مثلا به این صورت که طرف تاریخ تولدش رو وارد کنه و سیستم او نو از تاریخ امروز کم کنه و سن دقیق فرد رو بهش بگه ( خیلی مهمه)
ممنون

reza6384
یک شنبه 17 شهریور 1387, 17:09 عصر
الگوریتم ساده ای داره.
باید ابتدا محاسبه کنید بین سال تولد اون شخص تا امسال چند سال کبیسه وجود داره.

سیستم کبیسه خورشیدی : باقیمانده تقسیم سال به 33 یکی از این عدد ها باشد : 1 و 5 و 9 و 13 و 17 و 22 و 26 و 30

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

morteza_261
یک شنبه 17 شهریور 1387, 17:42 عصر
سلام


Dim D1, D2 AsDate
D1 = TxtDate1.Text
D2 = TxtDate2.Text
TxtDate.Text = DateDiff(DateInterval.Day, D1, D2)


با این کد تعداد روزهای بین دو تاریخ به شما برگردانده میشه...

برای تبدل هم میتونی اینطور عمل کنی:



year = Number \ 365
Mount = (Number Mod 365) \ 12
Day = ((Number Mod 365) \ 12) Mod 30

saman_itc
یک شنبه 17 شهریور 1387, 17:50 عصر
سلام به شما دوست عزیز
اولا شما باید روز کامپیوتر خود را تنظیم کنید (با دابل کلیک روی ساعت پایین سمت راست دسک تاپ) و سپس می توانی از این تابع استفاده کنی تابع Datediff است که شکل زیر را دارد


("تاریخ پایان ","تاریخ شروع","پاارامتر")DateDiff

که پارامتر هایش این ها هستند
yyyy براساس سال
Q بر اساس فصل
m بر اساس ماه
y بر اساس روزی از سال
d بر اساس روز
w بر اساس روزی از هفته
ww بر اساس هفته
h بر اساس ساعت
n بر اساس دقیقه
s بر اساس ثانیه

که بر اساس هر یک از این پارمتر ها تاریخ اول را از تاریخ دوم کم می کند

این از تابع حالا نحوه استفاده از آن این گونه است که یک متغییر تعریف می کنید از نوع long و جواب را در آن قرار بده و بعد چاپ کن

مثال


Dim A as long
("A=Datediff("yyyy","7/4/76","7/4/86
Print A



الان این کد ها را بذاری در یک Button در فرم عدد 10 را به معنای 10 سال اختلاف است


حالا یه چیز دیگه هم می گم مشکل برات پیش نیاید
1- تابع Date تاریخ کامپیوتر را می دهد
2- تابع Now تاریخ و ساعت کامپیوتر را با هم می دهد
این را برای این گفتم تا می خواستی تاریخ تولد را از تاریخ فعلی کم کنی برای همین گفتم





امیدوارم به دردت بخورد

parsavb
یک شنبه 17 شهریور 1387, 18:24 عصر
این رو امتحان کن البته بایستی فرمت تاریخی که به اون می دی به شمسی باشه مثل این 15/06/1387 و حالا برای شما سن رو به سال و ماه و روز حساب می کنه
مثلاً 12/02/50 پنجاه سال و دو ماه و دوازده روز
امیدوارم به دردت بخوره



PublicFunction senator(ByVal dat AsDate, ByVal dat2 AsDate) AsString
Dim yy1, yy2, mm1, mm2, dd1, dd2 AsInteger
Dim su10, su20, su30 AsInteger
Dim sk10, sk20, sk30 AsString
Dim sk40 AsString
yy1 = dat.Year
mm1 = dat.Month
dd1 = dat.Day
yy2 = dat2.Year
mm2 = dat2.Month
dd2 = dat2.Day
If dd2 >= dd1 Then
su30 = dd2 - dd1
Else
mm2 = mm2 - 1
dd2 = dd2 + 30
su30 = dd2 - dd1
EndIf
If mm2 >= mm1 Then
su20 = mm2 - mm1
Else
yy2 = yy2 - 1
mm2 = mm2 + 12
su20 = mm2 - mm1
EndIf
su10 = yy2 - yy1
If su30 < 10 Then

sk30 =

"0" + Trim(Str(su30))

Else
sk30 = Trim(


CStr(su30))

EndIf
If su20 < 10 Then
sk20 =


"0" + Trim(CStr(su20))

Else
sk20 = Trim(


CStr(su20))

EndIf
If su10 < 10 Then
sk10 =


"0" + Trim(CStr(su10))

Else
sk10 = Trim(


CStr(su10))

EndIf
sk40 = sk10 &


"/" & sk20 & "/" & sk30

Return sk40
EndFunction

اوبالیت به بو
یک شنبه 17 شهریور 1387, 18:28 عصر
اينجا چقدر شبيه اينجاست (http://barnamenevis.org/forum/showthread.php?t=121519)!

mostafaaa
یک شنبه 17 شهریور 1387, 21:03 عصر
البته یک چیز رو که دوستان به اون اشاره نکردن اینه که تابع DateDiff فقط برای تاریخ میلادی جواب میده و زمانی که تاریخ شمسی رو به اون میدی به ما جواب درستی برنمیگردونه . علتش هم کاملا واضحه ، چون تعداد روزهای مثلا ماه 5 میلادی با ماه 5 شمسی با هم متفاوته.برای مثال

Dim D1, D2 As Date
D1 = "1/1/1387"
D2 = "7/1/1387"
Me.Label1.Text = DateDiff(DateInterval.Day, D1, D2)این کد که قراره 186 رو برگردونه 181 برمی گردونه.
راه حلش هم اینه که ابتدا تاریخ شمسی رو به میلادی تبدیل کنیم و بعد از این تابع استفاده کنیم.
در ضمن یه کلاس هم خودم نوشتم که فکر میکنم سن رو به درستی نشون میده. حالا شما تستش کنید اگه اشکالی هم داشت با هم برطرفش میکنیم.

Public Class BirthDate
Function YourAge(ByVal BirthYear As Integer, ByVal BirthMonth As Integer, ByVal BirthDay As Integer) As String
Dim Pcal As New System.Globalization.PersianCalendar
Dim Bdate As Date = BirthMonth & "/" & BirthDay & "/" & BirthYear
Dim ShToday As Date = Pcal.GetMonth(Today) & "/" & Pcal.GetDayOfMonth(Today) & "/" & Pcal.GetYear(Today)
Dim Y, M, D As Integer
Y = ShToday.Year - Bdate.Year
M = ShToday.Month - Bdate.Month
D = ShToday.Day - Bdate.Day
If Y < 0 Or BirthMonth > 12 Or BirthDay > 31 Then
Return "تاریخ وارد شده اشتباه است"
End If
If M < 0 Then
Y -= 1
M += 12
End If
If D < 0 Then
If M = 0 Then
Y -= 1
M = 11
Else
M -= 1
End If

D += ShDaysInMonth(ShToday.Year, ShToday.Month)
End If
Return "سن شما : " & Y & " سال و " & M & " ماه و " & D & " روز"
End Function
Protected Function ShDaysInMonth(ByVal ShYear As Integer, ByVal ShMonth As Integer) As Integer
Dim PCal As New System.Globalization.PersianCalendar
Return PCal.GetDaysInMonth(ShYear, ShMonth)
End Function
End Class

saman_itc
دوشنبه 18 شهریور 1387, 00:19 صبح
میشه اول تبدیلش به میلادی و جواب گرفت.
تبدیلش تو امضام هست

mostafaaa
دوشنبه 18 شهریور 1387, 10:16 صبح
البته تبدیلش هم کار خاصی نیست.

Function ShamsiToMiladi(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As Date
Dim pcal As New System.Globalization.PersianCalendar
Return pcal.ToDateTime(Year, Month, Day, 1, 1, 1, 1)
End Function