PDA

View Full Version : تابع Datediff



M.T.P
سه شنبه 27 بهمن 1388, 18:31 عصر
دوستان طریقه استفاده صحیح از این تابع و بدست آوردن اختلاف دو تاریخ چطوریه؟:قلب:

xxxxx_xxxxx
سه شنبه 27 بهمن 1388, 23:49 عصر
سلام،
همانطور که از نام تابع پیداست، اختلاف دو تاریخ رو معین می کند.
این تابع 5 پارامتر دارد که 3 تای اولی الزامی و دوتای آخری اختیاری هستند.

پارامتر اول (Interval) : از طریق این پارامتر به تابع میگیم که اختلاف دو تاریخ را بر حسب چه چیزی بیان کند. روز، ماه، سال، هفته، ساعت، دقیقه و ثانیه و ... . این پارامتر از نوع رشته ای هست و میتونه یکی از مقادیر زیر باشه:


Expression Description
"yyyy" Year
"q" Quarter
"m" Month
"y" Day of year
"d" Day
"w" Weekday
"ww" Week
"h" Hour
"n" Minute
"s" Second
پارامتر دوم و سوم(Date1 و Date2)، تاریخ هایی هستند که میخواهیم اختلاف آنها را محاسبه کنیم. (تاریخ دوم از اولی کم میشه)

پارامتر سوم (FirstDayOfWeek)، یک مقدار ثابت هست که نشاندهنده روز شروع هفته هست. این پارامتر اختیاری هست و اگر مقداردهی نشوند به طور پیش فرض Sunday (یک شنبه) به عنوان روز شروع هفته درنظر گرفته می شود. عملاً این پارامتر زمانی کاربرد پیدا می کند که بخواهیم اختلاف دو تاریخ را بر حسب هفته بدست بیاوریم.

پارامتر چهارم (FirstWeekOfYear)، مشخص کننده هفته شروع سال هست که به طور پیش فرض هفته ای هست که 1 ژانویه در آن قرار دارد. این پارامتر هم اختیاری است.

یک نمونه استفاده از تابع:


MsgBox DateDiff("d", "2010/01/01", "2010/01/05")
حاصل دستور فوق عدد 4 هست. (اختلاف دو تاریخ بر حسب روز)

alinini
یک شنبه 23 مرداد 1390, 16:42 عصر
سلام استاد xxxxx_xxxxx من وقتی می خواهم تو این تابع متغیر به کار ببرم همیشه جوابو صفر میده لطفا هر چه زور تر جوابمو بدین
راستی کدی که من استفاده می کنم اینه

PRO.Caption = DateDiff("d", Text3.Text / Text2.Text / Text1.Text, Text6.Text / Text5.Text / Text4.Text)

محسن واژدی
یک شنبه 23 مرداد 1390, 18:06 عصر
سلام استاد xxxxx_xxxxx من وقتی می خواهم تو این تابع متغیر به کار ببرم همیشه جوابو صفر میده لطفا هر چه زور تر جوابمو بدین
راستی کدی که من استفاده می کنم اینه

PRO.Caption = DateDiff("d", Text3.Text / Text2.Text / Text1.Text, Text6.Text / Text5.Text / Text4.Text)

سلام
شکل صحیح دستورتان بدین صورت است:

PRO.Caption = DateDiff("d", Text3.Text & "/" & Text2.Text & "/" & Text1.Text, Text6.Text & "/" & Text5.Text & "/" & Text4.Text)


موفق باشید

ebrahimi.atena
دوشنبه 06 خرداد 1392, 10:16 صبح
سلام این تابع برای تاریخ شمسی هم استفاده میشه؟

محسن واژدی
دوشنبه 06 خرداد 1392, 10:43 صبح
سلام این تابع برای تاریخ شمسی هم استفاده میشه؟
سلام علیکم
چون تابع برای تاریخ های میلادی/قمری (بسته به نوع سالنامه) نوشته شده پس تاریخ ورودی را به عنوان تاریخ میلادی/قمری دریافت میکنه هرچند که تاریخ ورودی را به شمسی وارد کنیم اما درتابع به عنوان میلادی/قمری قلمداد میشه و تفاوت تاریخ را هم بر همون اساس میگردونه و ممکن هست در مقداری که مورد انتظار ماست با مقدار برگشتی تابع اختلاف وجود داشته باشد، برای همین برای تاریخ شمسی مناسب نیست،
همینطور Datediff برای برخی از تاریخ های شمسی خطای Miss-Match میدهد، به عنوان مثال در تاریخ زیر:

Private Sub Command1_Click()
MsgBox DateDiff("d", "1392/01/01", "1392/02/31")
End Subموفق باشید

ebrahimi.atena
دوشنبه 06 خرداد 1392, 12:41 عصر
سلام ممنون که جواب دادید اما حالا من چکار کنم؟ من تاریخ هام به شمسی هست چطوری به میلادی در sql ذخیره کنم ؟ کدی که تاریخم را در بانک ذخیره می کند به این شکل است:


private void button15_Click(object sender, EventArgs e)
{
if (MessageBox.Show("آیا میخواهید ثبت شود؟", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
sqlcom.CommandType = CommandType.StoredProcedure;
sqlcom.CommandText = "insert_m_gaz";
/sqlcom.Parameters.Add("@doreh", SqlDbType.VarChar, 50);
sqlcom.Parameters.Add("@az_date", SqlDbType.Char, 10);
sqlcom.Parameters.Add("@ta_date", SqlDbType.Char, 10);
sqlcom.Parameters.Add("@meghdar_masraf", SqlDbType.Int);
sqlcom.Parameters.Add("@mablagh_kol", SqlDbType.Int);
sqlcom.Connection.Open();
sqlcom.Parameters[0].Value = numericUpDown2.Value.ToString();
sqlcom.Parameters[1].Value = txtdate1.Text;
sqlcom.Parameters[2].Value = txtdate2.Text;
sqlcom.Parameters[3].Value = txtmasraf.Text;
sqlcom.Parameters[4].Value = txtmablagh.Text;
sqlcom.ExecuteNonQuery();
sqlcom.Connection.Close();
sqlcom.Parameters.Clear();
MessageBox.Show("اطلاعات با موفقيت ثبت شد");
clera_object2();
numericUpDown2.Focus();
button15.Enabled = false;
button14.Enabled = true;
button13.Enabled = true;
}
}

فیلدهای تاریخم در sql به نام های az_date و ta_date هست و از نوع char(10( لطفا با جزئیات توضیح بدید من مبتدی هستم.
ممنون

m.4.r.m
دوشنبه 06 خرداد 1392, 15:03 عصر
برای تاریخ های شمسی از DLL زیر استفاده کنید که خودش کلاسی به نام اختلاف تاریخ رو داره و راحت می تونی ازش استفاده کنی .

توابع این ابزار:

Convert_Date: تبدیل تاریخ شمسی به میلادی و برعکس
Convert_Date2Letter: دریافت تاریخ و برگشت سال/ماه/روز/روز هفته
Convert_Month2Letter: دریافت شماره ماه و تبدیل آن به حروف ( 1:فرودین و ... )
Convert_Number2Letter: تبدیل اعداد به حروف ( تا 18 رقم)

DateBetween: مقایسه سه تاریخ ( آیا تاریخ a بین تاریخ b و c می باشد؟)
DateCompare: مقایسه دو تاریخ
DateDiffShamsi: اختلاف دو تاریخ (به سال/ماه/هفته/روز/ساعت/دقیقه/ثانیه) - مشابه تابع DateDiff ویبی

DecreaseDate: کم کردن یک روز از تاریخ ورودی
IncreaseDate: اضافه کردن یک روز به تاریخ ورودی
DecreaseDate_Custom: کم کردن X روز از تاریخ ورودی
IncreaseDate_Custom: اضافه کردن X روز به تاریخ ورودی

Get_CurrentYear: تاریخ روز اول و آخر سال جاری را برمی گرداند.
Get_CurrentMonth: تاریخ روز اول و آخر ماه جاری را برمی گرداند.
Get_CurrentWeek: تاریخ روز اول و آخر هفته جاری را برمی گرداند.
Get_CurrentYearLength: طول سال جاری را برمی گرداند.
Get_CurrentYearMonthDay: روز، ماه، سال، تاریخ جاری را برمی گرداند.
Get_DayOfWeek: روز هفته را برمی گرداند (شنبه، یکشنبه، ...).
Get_First_DayOfCurrentMonth: روز اول ماه جاری را برمی گرداند (شنبه، یکشنبه، ...).
Get_First_DayOfCurrentWeek: روز اول هفته جاری را برمی گرداند (شنبه، یکشنبه، ...).
Get_Month: یک تاریخ دریافت می کند و تاریخ روز اول و آخر ماهی که تاریخ در آن قرار دارد را برمی گرداند.
Get_PreviousMonth: روز اول و آخر ماه قبل را برمی گرداند.
Get_PreviousYear: روز اول و آخر سال قبل را برمی گرداند.
Get_Week: یک تاریخ دریافت می کند و تاریخ روز اول و آخر هفته ای که تاریخ در آن قرار دارد را برمی گرداند.

IsValidDate: یک تاریخ دریافت می کند و درستی آن را بررسی می کند.
Split_Date: یک تاریخ دریافت می کند و آن را به سال/ماه/روز تجزیه می کند.

Today: تاریخ امروز را برمی گرداند.