الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طرح تاريخين من بعضهما في Sql Server

بدأه lana2008 في 5 أغسطس 2008 · 19 رد · 4,826 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عندي تاريخين في حقول في الداتا بيس

فرغت الحقول في التكست 4و5

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

عملت الكود بس ما زبط

هذا هو الكود

 con.Open()
		Dim cmd As New SqlCommand
		cmd.CommandText = "SELECT datediff( Day,'" & Me.TextBox5.Text & "','" & Me.TextBox4.Text & "')as Day"
		cmd.Connection = con
		Dim dr As SqlDataReader
		dr = cmd.ExecuteReader
		con.Close()

هلا انا كنت اخلية يرجع القيمة في التكست بوكس بس يعطين خطاء

واستخدمت دالة to string

بس ضل الخطاء

ياريت لو واحد يعرف طريقة او ايش الصح

وشكرااا

#3

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

بحثت وما في الا انو يرجعه على اساس السنوات او ايام او اشهر

هلا حاولت اجمعهم مع بعض استخدمت دوال VB.NET

بس ما قدرت

		Dim date1 As System.DateTime = Me.TextBox1.Text
		Dim date2 As System.DateTime = Me.TextBox2.Text
		Me.TextBox3.Text = DateDiff("yyyy", date1, date2)

هلا حاولت اعمل هيك بس ما زبطت

   Dim date1 As System.DateTime = Me.TextBox4.Text
		Dim date2 As System.DateTime = Me.TextBox5.Text
		Me.TextBox7.Text = DateDiff("yyyy/mm/dd", date1, date2)

بس طلع خطاء

ممكن تساعدوني

#4

استخدم الكود التالي

الكود C# ممكن تحوله vb بسهولة

DateTime date1 = DateTime.Now;
		DateTime date2 = DateTime.Now.AddDays(20);

		int diffDays = date2.Subtract(date1).Days;

		Response.Write(diffDays.ToString());

اقتباس
Me.TextBox7.Text = DateDiff("yyyy/mm/dd", date1, date2)

ممكن بعد كده تحول عدد الايام الي سنين و شهور و ايام

جرب الكود ده لم اجربه

(dateTime2.Year * 12 + dateTime2.Month) - (dateTime1.Year * 12 + dateTime1.Month);
#5

مازبطت طلع الرقم 18001587

#6

السلام عليكم ورحمة الله

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

#7

شكراااااااااا كتير

انا بدي يرجع على شكل تاريخ مثل

20\4\2008

3\2\2000

يطلع الناتج

على شكل

18\2\8

في امكانية يرجع على هذا الشكل

حاولت كتي بس بدون نتيجة

#8

18\2\8 هذا تاريخ بعد الميلاد بكم سنة ويعتبر غير معرف في البرمجة لان اول تاريخ في الكمبيوتر يبدأ تقريبا سنة 1700.

وايضا كيف سيتم الطرح في حالة اليوم الاول اكبر من الثاني او سنة اكبر .

ومرة اخرى طرح تاريخين لا معنى له

#9

كلام أخي طارق صحيح ... ليست كل التواريخ مقبولة في SQL Server أو في #C ... فلا معنى لتاريخ 18/8/8 ... ولا يوجد شيء اسمه طرح تاريخين ليعطي تاريخ ... كيف ذلك وبأي منطق ؟؟؟ يعني هل لو أنا طرحت يوم أمس من يوم غد هل سيعطيني تاريخ اليوم ؟؟؟ طبعاً غير صحيح ولن يعطي مثل هذه النتيجة ... ولكنه عند الطرح سيعطيني الفارق بين التاريخين TimeSpan في شكل أيام أو ساعات أو دقائق أو ثواني أو ميللي ثانية ...

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

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#10

انا عندي تاريخين تاريخ تسجيل المهمة و تاريخ الانتهاء من المهمة هلا

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

و بعد ما نعرف الفرق على هذا الاساس تقدر اتعاب

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

وشكراااااااا

#11

لحد الان لا يلزم التحويل الى تاريخ وانما فقط تحتاجين الى معرفة عدد الايام وبعد ذلك يضرب عدد الايام في أجر كل يوم

يعني على فرض انا عملت على مهمة من تاريخ 1-8-2008 الى 10-8-2008 فاكون عملت 10 ايام فاستحق أجر 10 أيام

#12

انت تقصد تحويل الايام بين التاريخين الي ما يقابله الي سنين و شهور و و باقي الايام

بمعني لو التاريخ الاول 1/1/2006 و التاريخ التاني 7/3/2008

نقول الفرق بنهم سنتين و 3 شهور و 7 ايام

لو كان ده المطلوب اعمل حسبة بسيطه علي عدد الايام

#13

طبعاً صار الأفضل إيجاد الفارق بين التاريخين على شكل أيام ... أو ساعات حسب طريقة حساب الأجر ..

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#14

ايوة هذا المطلوب كيف اعمل الحسبة

تحويل الايام بين التاريخين الي ما يقابله الي سنين و شهور و و باقي الايام

#15
اقتباس
ايوة هذا المطلوب كيف اعمل الحسبة

الكود التالي مجرد محاولة و ان شاء الله تساعدك

		public class DatesToPeriod
		{
			int _days;

			public int Days
			{
				get { return _days; }
				set { _days = value; }
			}
			int _months;

			public int Months
			{
				get { return _months; }
				set { _months = value; }
			}
			int _years;

			public int Years
			{
				get { return _years; }
				set { _years = value; }
			}

			public override string ToString()
			{
				return "Years: " + this.Years.ToString() + ", Months: " + this.Months + ", Days: " + this.Days.ToString() + ".";
			}

			public static DatesToPeriod DatesDiff(DateTime startDate, DateTime endDate)
			{
				// ملحوظة
				// لم اعتبر كون السنة كبيسة ام لا للتبسيط
				// و افترض ان تاريخ النهاية يكون اكبر من تاريخ البداية
				// و افترضت كل ان الشهر 30 يوم للتبسيط

				// كلاس للتنظيم فقط 
				DatesToPeriod diff = new DatesToPeriod();

				// فرق السنوات و لا افترض كونه سالب
				diff.Years = endDate.Year - startDate.Year;
				// فرق الشهور
				diff.Months = endDate.Month - startDate.Month;
				// فرق الايام
				diff.Days = endDate.Day - startDate.Day;

				// لو عدد بالسالب يعني طرح سنه من السنوات و اضافة باقي الشهور للشهور
				if (diff.Months < 0)
				{
					diff.Years -= 1;
					diff.Months += 12;
				}
				// لو عدد الايام  بالسالب يعني طرح شهر و اضافة باقي الايام للأيام
				if (diff.Days < 0)
				{
					diff.Months -= 1;
					//معتبرا ان كل الشهور 30 يوم للتبسيط
					diff.Days += 30;
				}
				return diff;
			}
		}

ممكن تستخدمه بالشكل التالي

DatesToPeriod diff = DatesToPeriod.DatesDiff(DateTime.Now.AddMonths(-3),DateTime.Now.AddDays(300));
			MessageBox.Show(diff.ToString());

بالتوفيق

و ان شاء الله نشوف محاولاتك

#16

تعديل بسيط

		public class DatesToPeriod
		{
			int _days;

			public int Days
			{
				get { return _days; }
				set { _days = value; }
			}
			int _months;

			public int Months
			{
				get { return _months; }
				set { _months = value; }
			}
			int _years;

			public int Years
			{
				get { return _years; }
				set { _years = value; }
			}

			public override string ToString()
			{
				return "Years: " + this.Years.ToString() + ", Months: " + this.Months + ", Days: " + this.Days.ToString() + ".";
			}

			public static DatesToPeriod DatesDiff(DateTime startDate, DateTime endDate)
			{
				DatesToPeriod diff = new DatesToPeriod();
				diff.Years = endDate.Year - startDate.Year;
				diff.Months = endDate.Month - startDate.Month;
				diff.Days = endDate.Day - startDate.Day;

				if (diff.Months < 0)
				{
					diff.Years -= 1;
					diff.Months += 12;
				}

				if (diff.Months == 0)
				{
					diff.Days = Math.Abs(diff.Days);
				}
				else if (diff.Days < 0)
				{
					diff.Months -= 1;
					diff.Days += 30;
				}
				return diff;
			}
		}

تأكد ان تاريخ النهاية اكبر من تاريخ البداية

بالتوفيق

#17

شكررررررررررررررررررررررا كتيرررررررررررررررررررررررررررررررررر

بس هذا بال C#

وانا في بي

هلا اخذت على احد محولا الاكواد طلع اخطاء كتير

#18

السلام عليكم

أولا أود أن أشكر الأخ AhmedElbaz على الشرح

اقتباس
بس هذا بال C#

وانا في بي

وهذا الكود

Public Class datesToperiod
	Dim _days As Integer
	Dim _months As Integer
	Dim _years As Integer
	Public Property days() As Integer
		Get
			Return _days
		End Get
		Set(ByVal value As Integer)
			_days = value
		End Set
	End Property

	Public Property months() As Integer
		Get
			Return _months
		End Get
		Set(ByVal value As Integer)
			_months = value
		End Set
	End Property
	Public Property years() As Integer
		Get
			Return _years
		End Get
		Set(ByVal value As Integer)
			_years = value
		End Set
	End Property
	Public Overrides Function ToString() As String
		Return "years: " + Me.years.ToString() + ",Months:" + Me.months + ",Days:" + Me.days.ToString() + "."
	End Function
	Public Shared Function DatesDiff(ByVal startDate As DateTime, ByVal endDate As DateTime) As datesToperiod
		Dim diff As datesToperiod = New datesToperiod
		diff.years = endDate.Year - startDate.Year
		diff.months = endDate.Month - startDate.Month
		diff.days = endDate.Day - startDate.Day

		If diff.months < 0 Then
			diff.years -= 1
			diff.months += 12
		End If
		If diff.months = 0 Then

			diff.days = Math.Abs(diff.days)

		ElseIf diff.days < 0 Then

			diff.months -= 1
			diff.days += 30
		End If

		Return diff

	End Function
End Class

ممكن تستخدمه بالشكل التالي

 Dim diff As datesToperiod = datesToperiod.DatesDiff(DateTime.Now.AddMonths(-3), DateTime.Now.AddDays(300))
		MsgBox(diff.ToString)

أستميح الأخ AhmedElbaz لقد قمت بتحويل الكود بتاعه لم أغير به شيء

لقد حاولت أن أحول الكود بعتماد على خلفيتي البسيطه في C#

قلت أتعلم حيث أني أريد أن أبدء مشاريعي المستقبليه ب C#

و أن شاء الله أكون قد وفقت في تحويل -_-

تم تعديل هذه المشاركة بواسطة Al-Mohana في 12 أغسطس 2008 في 21:12

تعلم فليس المرء يولد عالماً------ وليس أخو علماً كمن هو جاهلا

العلم نور وجمال يقتبس--------------- صاحبه مكرم اين ما جلس

من فاته العلم ساعة تظعظع ونتكس----شتان شتان بين حمار وفرس

#19
اقتباس
أستميح الأخ AhmedElbaz لقد قمت بتحويل الكود بتاعه لم أغير به شيء

لا الكود بتاعنا كلنا . حول اللي يعجبك :lol:

#20

طرح تاريخ DateTime من تاريخ آخر يعطي مدى زمني TimeSpan ... وهذا المدى له خصائص عديدة تخص الفوارق الوقتية .. منها عدد الأيام الفارقة بين التاريخين وعدد الساعات وعدد الثواني وكثير غيرها ...

TimeSpan ts = dt1 - dt2;
ts.TotalHours;

حيث ts.TotalHours يوضح إجمالي الفارق الزمني بين التاريخين في صورة ساعات .. ويوجد غيرها كـ TotalMinutes وكذا ..

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

مواضيع مشابهة