PDA

View Full Version : تعیین سن دقیق افراد



ali reza mansoori 2
پنج شنبه 27 مرداد 1390, 11:14 صبح
سلام
دوستان در برنامه برای ثبت یک رکورد تاریخ تولد فرد هم دریافت میشه
حالا من میخوام از روی این تاریخ سن دقیق رو هم داخل بانک ثبت کنم
فرمت تاریخ دریافتی در داخل برنامه من به شکل زیر است
xxxx/xx/xx

mpmsoft
پنج شنبه 27 مرداد 1390, 11:32 صبح
dim v_Year As Integer
v_Year = Split(TextBox1.Text,"/")(0)

msgbox v_Year - 1390

ali reza mansoori 2
پنج شنبه 27 مرداد 1390, 12:40 عصر
دوست عزیز خیلی ممنون
چند سوال داشتم که اگر لطف کنید ممنون میشم
1- جواب ها همگی منفی هستند باید جای v_Year و 1390 رو در خط آخر عوض کنم؟
2- این روش با تاریخ های شمسی مشکلی نداره؟
3- آیا راهی هست که بشه روز و ماه رو هم حساب کرد؟

setroyd
پنج شنبه 27 مرداد 1390, 14:19 عصر
Private Sub Command1_Click()
Dim v_Year As Integer
v_Year = Split(Text1.Text, "/")(0)

MsgBox Abs(v_Year - 1390)

End Sub
این واسه اینکه دیگه منفی نشه

setroyd
پنج شنبه 27 مرداد 1390, 15:00 عصر
Private Sub Form_Load()

Dim new_Year As Integer, new_month As Byte, new_day As Byte ' baraye tarikhe asliye shomast yani emroz

Dim old_Year As Integer, old_month As Byte, old_day As Byte ' tarikhe tavalode shakhse morede nazar ast

Dim year As Integer, month As Byte, day As Byte ' tafavote in 2 ra hesab mikonad yani beshoma sene shakhs morede nazar r migoyad

Dim n As String, m As String 'tarikht emroz va shakse morede nazar dar in 2 zakhire mishavad

n = "1390/5/27"
m = "1375/4/20"

new_Year = Split(n, "/")(0)
new_month = Split(n, "/")(1)
new_day = Split(n, "/")(2)

old_Year = Split(m, "/")(0)
old_month = Split(m, "/")(1)
old_day = Split(m, "/")(2)

year = new_Year - old_Year
month = new_month - old_month
day = new_day - old_day

Print "shoma" & vbNewLine & year & " salo " & month & " maho " & day & " rozeton has "

End Sub
ایننم کامل شده ی برنامه ی مدیر بخش این همه رو حساب میکنه و سن شخص رو کامل میگه

setroyd
پنج شنبه 27 مرداد 1390, 15:05 عصر
نه با تاریخ شما مشکل نداره چه شمسی چه میلادی چه ....... رو این جدا میکنه شما اگرم به مشکل خوردی میتونی n و m رو در بالا به میل خودت تغییر بدی مثلا بکن 1390.7.18 یا 18/7/1390 یا .... فقط اون کاراکتری که جدا میکنی باهاش از هم اون رو در بالا بجای "/" بزار موفق باشی

ramzdar
پنج شنبه 27 مرداد 1390, 15:11 عصر
1- جواب ها همگی منفی هستند باید جای v_Year و 1390 رو در خط آخر عوض کنم؟
2- این روش با تاریخ های شمسی مشکلی نداره؟
3- آیا راهی هست که بشه روز و ماه رو هم حساب کرد؟

ج1: بله. قانوناً باید عوض بشه
ج2: اگه بخوای فقط سال رو حساب کنی، نه مشکلی نداره. همینطور اگه بخوای تاریخ روز رو دستی وارد کنی.

جناب setroyd عزیز
توی کدی که گذاشتین یه چیز رو دقت نکردین
مثلا اگه تاریخ تولد شخص، 1358/4/28 باشه برنامه ارور میده و به مشکل میخوره.

setroyd
پنج شنبه 27 مرداد 1390, 15:18 عصر
عوض هم نشه با abs میشه منفی رو مثبت کرد قدر مطلق کارش اینه . ولی اگه جاشو عوض کنی صحیح تره بله .

ramzdar
شنبه 29 مرداد 1390, 10:13 صبح
اینم شیوه ابداعی خودم اما فکر نکنم زیاد دقیق باشه ولی تقریباً میشه گفت دقیقه
اشیاء مورد نیاز:
تکست باکس: 2 تا --- لیبل: یکی --- دکمه: یکی


Private Sub Command1_Click()
Dim DateDif As Integer
a = Split(Text2, "/")(0) * 365
a = a + Split(Text2, "/")(1) * 30
a = a + Split(Text2, "/")(2)
b = Split(Text1, "/")(0) * 365
b = b + Split(Text1, "/")(1) * 30
b = b + Split(Text1, "/")(2)
DateDif = b - a
sal = DateDif \ 365
mah = (DateDif Mod 365) \ 30
ruz = DateDif Mod 30
Label1 = sal & " سال و " & mah & " ماه و " & ruz & " روز"
End Sub

Private Sub Form_Load()
Text1 = "1390/05/29"
Text2 = "1390/04/05"
Label1.RightToLeft = True
End Sub

setroyd
شنبه 29 مرداد 1390, 13:45 عصر
اون سبکتر و راحت تره این زیاد استاندارد نیست

ramzdar
شنبه 29 مرداد 1390, 14:01 عصر
از نظر من اونی که شما نوشتی اصلاً استاندارد نیست
چرا؟! چون اگه شما تونستی با اون کد، فاصله تاریخ
n = "1390/5/27"
m = "1390/4/28"
رو بدست بیاری اونوقت تقریباً میشه گفت همه چیز درسته
فاصله این تاریخ با اون کدی که گذاشتم خیلی راحت بدست میاد ولی با اون کدی که شما گذاشتی عمراً بدست نمیاد
بعدشم من نمیفهمم کجای یه کد حداکثر 15 سنگینه!؟!
از شما دیگه بعیده دوست عزیز.

setroyd
شنبه 29 مرداد 1390, 14:33 عصر
پس من چیکار کردم !!!!!!!!! من فاصله رو حساب کردم برنامه ی شما پکار میکنه که واسه من نمیکنه !؟؟

ramzdar
شنبه 29 مرداد 1390, 14:40 عصر
دوست عزیز چرا ناراحت میشی؟؟؟
برنامه ای که شما گذاشتی نمیتونه اون فاصله رو حساب کنه.
شما یه بار تست کن ببین اون تاریخ ها جواب میده یا نه.

setroyd
شنبه 29 مرداد 1390, 14:46 عصر
میده که گذاشتم خیالت راحت . شما اگه برنامه نویس بودی میفهمیدی که باید autoredraw برنامه رو true کنی و بعدن نظر بدی موفق باشی

ramzdar
شنبه 29 مرداد 1390, 15:11 عصر
دوست عزیز من
مطمئن باش اینقدرا رو بلدم
مشکل این نیست
مشکل اینه که ارور میده.

setroyd
شنبه 29 مرداد 1390, 15:24 عصر
Private Sub Form_Load()

Dim new_Year As Integer, new_month As Byte, new_day As Byte ' baraye tarikhe asliye shomast yani emroz

Dim old_Year As Integer, old_month As Byte, old_day As Byte ' tarikhe tavalode shakhse morede nazar ast

Dim year As Integer, month As Integer, day As Integer ' tafavote in 2 ra hesab mikonad yani beshoma sene shakhs morede nazar r migoyad

Dim n As String, m As String 'tarikht emroz va shakse morede nazar dar in 2 zakhire mishavad

n = "1390/5/27"
m = "1390/4/28"

new_Year = Split(n, "/")(0)
new_month = Split(n, "/")(1)
new_day = Split(n, "/")(2)

old_Year = Split(m, "/")(0)
old_month = Split(m, "/")(1)
old_day = Split(m, "/")(2)

year = Abs(new_Year - old_Year)
month = Abs(new_month - old_month)
day = Abs(Absnew_day - old_day)

Print "shoma" & vbNewLine & year & " salo " & month & " maho " & day & " rozeton has "

End Sub
اینم واسه اینکه از byte استفاده کرده بودم و الان کردم integer

ramzdar
شنبه 29 مرداد 1390, 15:31 عصر
بابا عزیز من یه تست بکن بعد بذار
کاملاً مشخصه که اشتباهه
به مقدار خروجی که میده توجه کن

setroyd
شنبه 29 مرداد 1390, 15:34 عصر
n = "1390/5/27"
m = "1390/2/28"

new_Year = Split(n, "/")(0)
new_month = Split(n, "/")(1)
new_day = Split(n, "/")(2)

old_Year = Split(m, "/")(0)
old_month = Split(m, "/")(1)
old_day = Split(m, "/")(2)

y = Abs(new_Year - old_Year)
m = Abs(new_month - old_month)
d = Abs(new_day - old_day)

Print "shoma" & vbNewLine & y & " salo " & m & " maho " & d & " rozeton has "
این کد درسته من استباه کردم

ramzdar
شنبه 29 مرداد 1390, 15:50 عصر
این کد هم اشتباهه
بهترین راه فعلاً همون روشیه که بنده ارائه کردم
میتونید تست کنید.

atrinsoft
پنج شنبه 01 تیر 1391, 20:18 عصر
ramzdar (http://barnamenevis.org/member.php?151819-ramzdar) کد شما هم ایراد داره مثلا تاریخ 1391/04/03 و 1390/04/03 که باید 1 سال بینشون باشه رو میزنه 1 سال و 5 روز