منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : إجراء عمليات على تاريخ بتنسيق مختلف عن تنسيق الجهاز
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته
عندي تاريخ بهذا التنسيق:
20/04/2019

قد يدون تنسيق الجهاز بهذا الشكل:
20-04-2019
أو بهذا الشكل:

2019/04/20

أريد تعديل الكود التالي بحيث تتم العملية بنجاح مهما كان تنسيق التاريخ بالجهاز علماً أنني أريد تنسيق التاريخ عند الإدخال هكذا:

dd/MM/yyyy


جربت الكثير من الطرق ولكن لم تنفع، ووالملف بالمرفقات، وهذا هو الكود:
كود :
 If IsDate(TxtBDate.Text) Then
            TBDateTakePric.Text = DateAdd("d", 14, TxtBDate.Text)

            Dim dayadd As Date = DateAdd("d", 14, TxtBDate.Text)
            Dim days2 As Long = DateDiff("d", Now.Date, dayadd)
            'TBDateNumDay.Text = days2.ToString

            Select Case days2
                Case 0
                    TBDateNumDay.Text = "اليوم آخر يوم للتعليق "
                Case < 0
                    TBDateNumDay.Text = "الرصيد متاج منذ مدة"
                Case > 14
                    TBDateTakePric.Text = "لم يحن هذا التاريخ بعد"
                    TBDateNumDay.Text = "لم يحن هذا التاريخ بعد"
                Case Else
                    TBDateNumDay.Text = days2.ToString
            End Select
        Else
            TBDateTakePric.Text = "أدخل تاريخاً صحيحاً"
            TBDateNumDay.Text = "أدخل تاريخاً صحيحاً"
        End If
وعليكم السلام ورحمة الله وبركاته

مرحباً اخى السندبااد

القي نظرة على الكود بهذا الشكل
كود :
       If IsDate(TxtBDate.Text) Then
           TBDateTakePric.Text = DateAdd("d", 14, CDate(TxtBDate.Text).ToString("dd/MM/yyyy"))

           Dim dayadd As Date = DateAdd("d", 14, CDate(TxtBDate.Text).ToString("dd/MM/yyyy"))
           Dim days2 As Long = DateDiff("d", Now.Date, dayadd)
           'TBDateNumDay.Text = days2.ToString

           Select Case days2
               Case 0
                   TBDateNumDay.Text = "اليوم آخر يوم للتعليق "
               Case < 0
                   TBDateNumDay.Text = "الرصيد متاج منذ مدة"
               Case > 14
                   TBDateTakePric.Text = "لم يحن هذا التاريخ بعد"
                   TBDateNumDay.Text = "لم يحن هذا التاريخ بعد"
               Case Else
                   TBDateNumDay.Text = days2
           End Select
       Else
           TBDateTakePric.Text = "أدخل تاريخاً صحيحاً"
           TBDateNumDay.Text = "أدخل تاريخاً صحيحاً"
       End If

بمجرد استخدام CDate
فهنا يعنى التاريخ مدخل يوم شهر سنة أو شهر يوم سنة
سيكون بالنهاية تاريخ  مهما اختلف وضع التنسيق بالجهاز والمدخل

وياتى دور
كود :
.ToString("dd/MM/yyyy")

وهنا لتحديد طبقاً لما تريده

تعال انت كده واكتب التاريخ بهذا الشكل
كود :
يوم شهر
25 4


فقط مسافة بين الرقمين وبدون تحديد السنة
الان تعال وجرب بهذا الشكل
كود :
24 4 2019

طيب تعال وجرب بهذا الشكل
كود :
24-4-2019
أو
24-4

والشكل العام
كود :
24/4
أو
24/4/2019

بالنهاية راجع هذا الرد وكذلك الموضوع
http://vb4arb.com/vb/showthread.php?tid=...#pid139804

اتمنى انها تفيدك فى طريقة استخدام لادخال التاريخ

تحياتى لك
وتمنياتى لك التوفيق

وصحيحة نقطة اخيرة ونسيت تعديلها والتحدث بخصوصها
على هذا السطر لكود شرط التحقق
كود :
       If IsDate(TxtBDate.Text) Then

يفضل ان تجعله بهذا الشكل
كود :
       If Date.TryParseExact(TxtBDate.Text, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture, Globalization.DateTimeStyles.None, DatePc) Then

وضع اعلى هذا السطر لشرط التحقق هذا الكود
كود :
       Dim DatePc As Date

بكده اى كان تنسيق الجهاز حتى ولو كان مثل
كود :
الخميس 25 ابريل 2019

فقط سيسلز بان يكون التاريخ المدخل فى TextBox
عبارة عن هذا الشكل
كود :
25/04/2019

ويلزم وضع 0 فى الشهر اذا كان الرقم من 1 : 9

ولتجنب وضع السفر ويكفي اذا كان التاريخ مدخل مثل هذا
كود :
25/4/2019

بانه يكفي الغرض فقط استبدل
كود :
dd/MM/yyyy

الى
كود :
dd/M/yyyy

بكده سيقبل التاريخ بهذا الشكل
كود :
25/4/2019

وايضاً
كود :
25/04/2019

تحياتى لك
وتمنياتى لك التوفيق
جزاك الله ووالديك الفردوس الأعلى أخي العزيز elgokr
لكن للأسف لم يتم الحل عندما يكون تنسيق التاريخ في الجهاز بهذا الشكل:
[attachment=21414]


يمكنك التأكد بنفسك علماً أنني أستخدم ويندوز 10
فى البداية اسف على التاخير اخى السندبااد

بمجرد ما اطلعت على ردك فخطر فى بالى اكثر من طريقة
ولكن حتى اضع الطريقة التى لا تسبب مشكلة مهما اختلف تنسيق التاريخ
فاحببت اختبر كل ما خطر فى بالى

وسامحنى لكوني لم اختبر كل ما فى بالى ايضاً
لان من ضمنها اذا كان التنسيق كما مشار اليه او غيره ولكن مع التاريخ الهجري ايضاً

لكن بمجرد ما وصلت لك الفكرة من المؤكد انت ستتمكن من فعل الامر

ما خطر فى بالى هو التلاعب فى قيمة TxtBDate

حيث سيتم اجبار المستخدم ادخال التنسيق بهذا الشكل
كود :
25/4/2019
25/04/2019

فيتم التلاعب بعكس القيمة لتصبح
كود :
2019/4/25
2019/04/25

بكده لا يعترض مع اى تنسيق مهما كان واى ما يتم اختياره

ويتم من خلال هذا الكود
كود :
       Dim GetDate As Date
       If TxtBDate.Text.Contains("/") AndAlso TxtBDate.Text.Split("/").Count = 3 AndAlso IsNumeric(TxtBDate.Text.Split("/").Last) Then
           GetDate = TxtBDate.Text.Split("/")(2) & "/" & TxtBDate.Text.Split("/")(1) & "/" & TxtBDate.Text.Split("/")(0)
       End If

الكود كاملاً للحدث
كود :
       Dim GetDate As Date
       If TxtBDate.Text.Contains("/") AndAlso TxtBDate.Text.Split("/").Count = 3 AndAlso IsNumeric(TxtBDate.Text.Split("/").Last) Then
           GetDate = TxtBDate.Text.Split("/")(2) & "/" & TxtBDate.Text.Split("/")(1) & "/" & TxtBDate.Text.Split("/")(0)
       End If
       If IsDate(GetDate) Then
           TBDateTakePric.Text = DateAdd("d", 14, GetDate)
           Dim dayadd As Date = DateAdd("d", 14, GetDate)
           Dim days2 As Long = DateDiff("d", Now.Date, dayadd)

           Select Case days2
               Case 0
                   TBDateNumDay.Text = "اليوم آخر يوم للتعليق "
               Case < 0
                   TBDateNumDay.Text = "الرصيد متاج منذ مدة"
               Case > 14
                   TBDateTakePric.Text = "لم يحن هذا التاريخ بعد"
                   TBDateNumDay.Text = "لم يحن هذا التاريخ بعد"
               Case Else
                   TBDateNumDay.Text = days2.ToString
           End Select
       Else
           TBDateTakePric.Text = "أدخل تاريخاً صحيحاً"
           TBDateNumDay.Text = "أدخل تاريخاً صحيحاً"
       End If

اتمنى هذه الفكرة تناسبك
او تاتى لديك من اسلوب وافكار من خلالها

تم اختبار هذا الكود على اكثر من تنسيق
ويعمل البرنامج بدون اى مشكلة 

تحياتى لك
وتمنياتى لك التوفيق
جزاك الله خيراً أخي العزيز elgokr
بالفعل فكرت بهذا الحل، فألف شكر لك على هذه الفكرة الطيبة
وكنت أتمنى لو أن مايكروسوفت أوجدت لنا حلاً يتعامل من خلاله البرنامج مع تنسيق محدد من التاريخ بغض النظر عن تنسيق تاريخ الجهاز، فقد أوجدوا حلاً لمشكلة التاريخ الهجري أو الميلادي؛ حيث يمكنك اعتماد تاريخ معين ضمن برنامجك؛ كالتاريخ الهجري مثلاً، بغض النظر عن نوع التاريخ في الجهاز، فكنت أتمنى لو وُجِدَ مثل هذا الحل لمشكلة تنسيق التاريخ.

أكرر شكري لك أخي العزيز
Smile
(26-04-19, 12:11 PM)السندبااد كتب : [ -> ]
جزاك الله خيراً أخي العزيز elgokr
بالفعل فكرت بهذا الحل، فألف شكر لك على هذه الفكرة الطيبة
وكنت أتمنى لو أن مايكروسوفت أوجدت لنا حلاً يتعامل من خلاله البرنامج مع تنسيق محدد من التاريخ بغض النظر عن تنسيق تاريخ الجهاز، فقد أوجدوا حلاً لمشكلة التاريخ الهجري أو الميلادي؛ حيث يمكنك اعتماد تاريخ معين ضمن برنامجك؛ كالتاريخ الهجري مثلاً، بغض النظر عن نوع التاريخ في الجهاز، فكنت أتمنى لو وُجِدَ مثل هذا الحل لمشكلة تنسيق التاريخ.

أكرر شكري لك أخي العزيز
Smile

لى ولك وللجميع بامر الله

بخصوص ما يخص مايكروسوفت فالامر بحاجة لمن يرسالهم
كا نتبيه بوجود مشكلة حتى تتم تحديثها مع التحديثاً والاضافات

كذلك لا يوجد اى شئ يبني من البشر الا وبه عيب
لان الانسان ليس على علم ولا دراية بكل ما قد يحدث مستقبلياً
بل على علم لما دار وحدث مسبقاً فقط فحتى نحن خلال مايكروسوفت يمكننا عمل Function
او مكتبة يتم استخدامها تعالك مثل هذا الامر فقط كل ما يحتاج بعض الوقت
واختبار الامر على اكثر من نظام و تنسيق حتى يتمكن من اعتماده للجميع وليس لشخص واحد فقط

تحياتى لك
وتمنياتى لك التوفيق