برای انتخاب تاریخ (DatePicker) توسط JavaScript توابع زیادی نوشته شده و یکی از جالبترین آنها پلاگینی است که در jQueryUI وجود دارد. این پلاگین امکان شخصی شدن زیادی دارد ولی متاسفانه امکان استفاده از تقویم شمسی در آن وجود ندارد.
در اینجا نسخه اصلاح شده این تقویم را که پشتیبانی از تاریخ هجری شمسی را به آن اضافه کرده ام، به همراه نحوه استفاده و چند مثال ارایه نموده ام. ضمنا کلیه فایلهای مورد استفاده در اینجا به صورت یک فایل فشرده قابل دریافت است. در این نسخه امکان اضافه کردن تقویم های دیگر نیز به سادگی وجود دارد. به عنوان مثالی از چگونگی اضافه کردن تقویم جدید، تقویم هجری قمری را نیز پیاده سازی کرده ام و در مثال ضمیمه قابل مشاده است.
توضیح کد:
با توجه به نیازی که به این تقویم داشتم، تغییرات بسیار مختصری در پلاگین اصلی دادم و در نتیجه آن، امکان تغییر تقویم مورد استفاده در آن را نیز اضافه نمودم. این نسخه اصلاح شده، تحت نام ui.datepicker-cc.js موجود است (پسوند cc به معنی Custom Calendar است).
در ادامه برای اضافه کردن تقویم شمسی، یک کلاس جدید به اسم JalaliDate ایجاد کردم که مشابه کلاس Date در جاوااسکریپ عمل می کند. البته این کلاس شامل تمامی متدهای کلاس Date نمیشود و تنها متدهایی که در اینجا نیاز بود، پیاده سازی شد. این کلاس در حقیقت یک پوسته برای توابع تقویم جلالی پروژه فارسی وب است. این کلاس با استفاده از توابع موجود در اینجا پیاده سازی شده است. پیاده سازی سایر تقویم ها نیز با استفاده از توابع موجود در این سایت به سادگی امکان پذیر است. در نهایت فایل به نام ui.datepicker-cc-fa.js ایجاد کردم که کلیه تنظیمات لازم برای شمسی شدن تقویم و فارسی شدن این پلاگین را دارد. کلیه فایلهای ذکر شده را می توانید از ضمیمه این مقاله دریافت کنید.
روش استفاده:
استفاده از این پلاگین همانند تمام پلاگینهای دیگر jQuery است. برای این کار باید فایلهای css مربوط به theme مورد علاقه خود را به فایل html اضافه کنید.
سپس بعد از اضافه کردن اسکریپتهای jquery.js و ui.core.js (که در تمام پلاگینهای jQuery انجام میشود)، فایلهای ارایه شده در اینجا (ui.datepicker-cc.min.js و calendar.min.js و ui.datepicker-cc-fa.js) را اضافه کنید.
به عنوان مثال در بخش head فایل html خود، قسمتی مشابه کد زیر خواهید داشت:
<link type="text/css" href="ui.core.css" rel="stylesheet" /> <link type="text/css" href="ui.theme.css" rel="stylesheet" /> <link type="text/css" href="ui.datepicker.css" rel="stylesheet" /> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript" src="ui.core.min.js"></script> <script type="text/javascript" src="ui.datepicker-cc.min.js"></script> <script type="text/javascript" src="calendar.min.js"></script> <script type="text/javascript" src="ui.datepicker-cc-fa.js"></script>مثال
$('#datepicker1').datepicker();
$("#datepicker2").datepicker({
altField: '#alternate2',
altFormat: 'DD، d MM yy'
});
$('#datepicker3').datepicker({
showButtonPanel: true
});
$("#datepicker4").datepicker({
dateFormat: 'dd/mm/yy'
});
$("#format4").change(function() {
$('#datepicker4').datepicker('option', {dateFormat: $(this).val()});
});
$('#datepicker5').datepicker({
changeMonth: true,
changeYear: true
});
$("#datepicker6").datepicker({
showOn: 'button',
buttonImage: 'calendar.gif',
buttonImageOnly: true
});
$('#datepicker7').datepicker();
$('#datepicker8').datepicker({
numberOfMonths: 3,
showButtonPanel: true
});
بروزرسانی: نسخه جدید که شامل رفع چند باگ کوچک در اینترنت اکسپلورر است، ضمیمه شد.
بروزرسانی 2: نسخه سوم (رفع باگهای مربوط به حداقل و حداکثر تاریخ که در اینجا و اینجا گزارش شده بود) ضمیمه شد. ضمنا در این ضمیمه، مثالهای استفاده از حداقل و حداکثر تاریخ نیز اضافه شده است.
بروزرسانی 3: نسخه چهارم ضمیمه شد. در این نسخه یک باگ کوچک دیگر در ارتباط با تنظیم حداقل و حداکثر تاریخ برطرف شد. در این ضمیمه، مثال استفاده از حداقل به صورت پویا اضافه شده است.
بروزرسانی 4: نسخه پنجم ضمیمه شد. در این نسخه امکان استفاده همزمان از تقویم شمسی و میلادی یک صفحه فراهم شده است. نمونه ای از روش استفاده در مثال ضمیمه وجود دارد. همچنین نسخه فشرده شده اسکریپت (برای کاهش حجم صفحات) نیز ضمیمه شده است و در مثال از آن استفاده شده است.
بروزرسانی 5: کنترل سفارشی انتخاب تاریخ برای ASP.NET ایجاد شده و در اینجا قابل مشاهده است.
بروزرسانی 6: تغییرات مختصری در اسکریپتها داده شد و تقویم شمسی استفاده شده عوض شد. با اعمال این تغییرات، تعریف تقویم جدید ساده تر شده است. همچنین امکان استفاده از تاریخ هجری قمری نیز به همراه مثالی برای استفاده از آن اضافه شد.
بروزرسانی 7: مشکلات نسخه آخر تقویم در IE و همینطور مشکل موجود در هنگام استفاده از setDate برطرف شد.
بروزرسانی 8: در نسخه جدید از jquery ui نسخه 1.8 به همراه jquery نسخه 1.4.2 استفاده شده است.
| ضمیمه | اندازه |
|---|---|
| jquery.ui.datepicker1.8-cc.zip | 136.08 کیلو بایت |
نظرات
ui.datepicker-cc.min.js موجود نیست
سلام مهندس - خسته نباشی
من jquery.ui.datepicker1.8-cc.zip رو دانلود کردم ولی فایلهای
jquery-1.3.2.min.js
ui.core.min.js
ui.datepicker-cc.min.js
calendar.min.js
رو نداره
عدم امکان انتخاب تاریخ قبل
سلام مهندس دستت درد نکنه - خیلی عالی بود
من میخام کاربر نتونه تاریخ قبل از روز جاری رو انتخاب کنه و در ضمن تاریخ انتخابی پیش فرض تاریخ امروز باشه لطفا کمکم کنید
تشكر
سلام
واقعا ممنون.خيلي بدردم خورد.
مشکل: وجود bug در تقویم JalaliDate
امروز که تاریخ 1389/5/27 می باشد متد زیر را اجرا کردم که متوجه شدم به اشتباه تاریخ 1389,4,27 برگردانده می شود:
function test() {
var jd = new JalaliDate();
alert(jd);
}
تاریخ سیستم درست است.
jQuery & AJAX
سلام مهندس. باوجود اینکه پست های کمی گذاشتی ولی انصافا مطالبت فوق العادس.متشکرم.
من یک راهنمایی می خوام درمورد کاربا متدهای post و get.
موقعی که با $.ajax دیتا میفرستم و مثل تکنولوژی ای جکس با readyState و status می تونم پاسخ دریافتی رو داشته باشم که اگه ارور یا مشکل دیگه ای باشه پیام خاصی بده. ولی با post و get نمی تونم این کارو بکنم.
مثل این کد:
var htmlobj=$.ajax({
type: "GET",
url: "action.asp",
data: "test=This is a test",
async:false,
});
if (htmlobj.readyState==4 && htmlobj.status == 200){
$("#result").html(htmlobj.responseText);
else{alert (" ")}
لطفا راهنماییم کن.
ســـــــپــــــــــــــاس
ASP.Net
با سلام و تشکر فراوان بابت این زحمتی که کشیدین فقط من یه مشکلی دارم اونم اینکه نمیتونم در ASP.Net استفاده کنم البته میتونم ها ولی نمیتونم بهش دسترسی داشته باشم در داخل کد های وی بی و وقتی میام runat=Server میدم دیگه کار نمیکنه بدون اون هم از کد وی بی بهش دسترسی ندارم راهنمایی کنید منو لطفا ممنون
timepicker
سلام می شه تقویمی که زمان هم داشته باشه را با jquery برامون بزاری
من از timepicker استفاده کردم اما با این تقویم فارسی شما نمی خونه
ممنون می شم
استفاده در DataGrid در َASP.NET و به زبان VB
سلام دوست عزیز از زحمتی که کشیدی ممنون.
چطوری میتونم یه TextBox رو در DataGrid که تو حالت Edit هست نسبت بدم . میدونید که اشیایی که توی حالت Edit استفاده میشن توی حالت معمولی ناشناخته هستن تا حالت Edit فعال بشه .
پروژم لنگته ممنون میشم با یه مثال سریع کارمو راه بندازی.
به هر زبانی نوشتی اشکال نداره من چند تا زبان رو بلدم
سلام و خسته نباشید
ممنون از مرحمتی که داشتید و این کد را برای همه گذاشتید.
می خواستم ببینم می شه از این کد در windows application که در جاوا نوشته می شود استفاده نمود و اگر می شود لطف کنید و بگوید چطوری؟
ممنون می شوم از شما.
منتظر جوابتون هستم.
بازم تشکر
سلام.
ممنون ای این که وقت گذاشتین و نتیجه کارتون رو بصورت مجانی در اختیار برنامه نویسای ایرانی قرار دادید. کار جالبی بود.
امیدوارم موفق باشید.
ورژن هاي مختلف
سلام
من براي استفاده در دروپال بايد اين كد رو با جي كوئري 1.2.6 و jquery ui 1.6 استفاده كنم.
من اين ورژن رو ميخوام اما باگ هايي كه تو آپديت هاي بعد رفع شده هم توش باشه.
اينجا فقط ورژن آخر براي دانلود هست.
پيشنهاد ارتقاء
با سلام و خسته نباشيد به شما دوست عزيز:
اين بنده حقير در حال تهيه برنامه شبكه اي تحت وب براي سازماني هستم كه مسئله تاريخ بحث مهمي است براي اين كه از تبديل سمت سرور استفاده نكنم و شكل و شمايل خوبي هم داشته باشي به برنامه شما برخوردم
اما از جهت استفاده اينجانب يك اشكال هست و اون اينكه : به علت دستكاري سيستمهاي سازماني و شركتي بزرگ توسط كاربران ، بنده نياز دارم تاريخ از جانب سرور ست شود
آيا امكان حل اين مشكل در برنامه شما هست
تشکر
کار بسیار خوبی بود.
متشکرم
در صورت امکان فارسی سازی اعداد را هم اضافه کنید.
کد نویسی داغوون شما
واقعا براتون متاسفم که با اینکه کار جالبی انجام دادین ولی تغییرات رو برداشتین روی فایل اصلی datepicker جیکوئری یوآی اضافه کردین!!
کد نویسی داغوون شما
واقعا ممنون میشم اگر شما (یا هرکس دیگه ای) روش بهتری پیشنهاد بده. این چیزی بوده که به فکر من رسیده و متاسفانه راهی برای اینکه بدون دست کاری سورس اصلی این امکان رو بهش اضافه کنم بلد نبودم. لطفا شما به من یاد بدین.
به هر حال ممنون از نظرتون.
موضوع بی موضوع
خب ، حس ششمم میگه اینو یه جایی دیدم!
فقط خیلی سای-تت/تتون!- خشکه! آدم حوصله اش سر میره خب! (یه تمرین رژه ای چیزی!!)
good job
this is one of the best tip that i had ever
i really enjoyed and another point is that you also have done perfect documentation and sample
good luck
مرد، واقعاً عالی کار کردی.
مرد، واقعاً عالی کار کردی. خسته نباشی
انتخاب با کلیک بر روی عکس
با سلام
آیا این امکان وجود داره که icon تاریخ, داخله text box بیفته؟ اگر داره چطور میشه اینکارو کرد؟
با تشکر فراوان
Ehsan
انتخاب با کلیک بر روی عکس
سلام،
میتونید با استایل دادن این کار رو بکنید. مثلا یک position: relative و right:-20 فکر کنم این کار رو بکنه. البته باید یکمی سر و کله بزنی باهش تا خوب در بیاد!
تشکر
واقعا این کار جای تشکر داره و حیف که این کار و دانلود کنی
و یک تشکر به عنوان کامنت نذاری
خیلی ممنون از زحمتی که کشیدید
مجتبي خليليان
خيلي ممنون
واقعا كه خيلي زحمت كشيديد .
موفق باشيد .
نسخه جدید jquery
سلام نسخه جدید jquery اومده، نمیخواید تقویم رو به نسخه جدید بروز رسانی کنید؟
نسخه جدید jQuery
سلام،
انشالله بزودی (بعد از انتشار نسخه جدید jQuery UI)
انتقال تاريخ توليد شده به mysql
سلام كارتون خيلي جالبه ان شاء الله كه اين كار را ادامه دهيد.
يه سوال داشتم. من تاريخ گذاشتم حالا مي خوام بدونم در ديتابيس فيلد بايد تاريخ باشه يا varchar و طريقه تبديل به تاريخ ميلادي رو هم مي خواستم بدونم.
ممنون
انتقال تاريخ توليد شده به mysql
سلام، ممنون.
من شخصا ترجیح میدم فیلد دیتابیس تاریخ باشه. برای گرفتن تاریخ میلادی هم کافیه از ویژگی Date استفاده کنید و نیازی به انجام تبدیل خاصی نیست.
تشکر
واقعا خسته نباشید
این کار شما عالی بود،نمی دونم چطوری می شه ازتون تشکر کرد
آفرین به این همت والا و روح بزرگی که دارید و نتیجه زحماتتون راحت در اختیار همه قرار می دید
تشکر از زحمت شما برای این کار بزرگ
ما از کامپوننت های asp.net برای تاریخ استفاده می کردیم و از آنجا که ازاین کامپوننت ها بسیار متنفر هستیم به سمت کامپوننت های jquery رفتیم که برای فارسی کردن آن به مشکل بر خوردیم و با دیدن کامپوننت فارسی شما بسیار مسرور شدیم باز از زحمت شما متشکر هستیم.
بسیار عالی . واقعا خسته
بسیار عالی . واقعا خسته نباشید . امیدوارم در تمام مراحل زندگی شاد باشید .
مشکل در php & smarty
سلاممن برای ساخت یک سایت به زبان php از smarty استفاده می کنم اما نمی توانم از این datepicker استفاده کنم و تمام مراحل را مانند آچه گفته بودید انجام دادم و هیچ نتیجه ای نگرفته ام لطفا کمک کنید.
مشکل در php & smarty
سلام،
من با smarty اصلا کار نکردم. اگر بتونید یک صفحه ساده آماده کنید و یک جا آپلود کنید و لینکش رو بدین، حتما بررسی میکنم.
موفق باشید.
تشکر
اول از شما بابت این مطالب جدید تشکر می کنم
بعد اینکه آیا واقعا راهی برای فارسی کردن اعداد وجود نداره که بی دردسر باشه
فارسی شدن اعداد
ممنون از نظرتون.
راه که زیاده ولی به نظر من بی دردسر ترینش همون استفاده از فونت هست که یکی از دوستان در کامنتهای قبلی اشاره کرده بود.
فارسي شدن اعداد
سلام براي فارسي كردن اعداد كافي به فايل css مراجعه كرده و font-family رو برابر با يك يا چند تا از فونت هاي استاندارد فارسي همانند b koodak قرار بديد.
سپاس گذارم.
فارسی شدن اعداد
سلام،
ممنون از پیشنهادتون.
این هم پیشنهاد خیلی خوبیه، فقط مشکل کوچکی که داره اینه که ممکنه فونت نصب نباشه که به نظر من اونقدرها مهم نیست و مشکل خاصی پیش نمیاد.
با این پیشنهاد شما تقریبا از فارسی کردن اعداد منصرف شدم. البته قبلا هم چون میخواستم تغییرات در کد اصلی حداقل باشه، شک داشتم که این کار رو انجام بدم یا نه!
beforeShow
با سلام دوباره ، اگر من بخوام كه قبل اینکه datepicker باز بشه یه تاریخی توش select کنم كه به جای تاریخه روز اونو نشون بده چی کار باید کنم؟
در حال حاضر وقتی datepicker باز میشه تاریخه روز انتخاب شده.
تاریخ پیشفرض
در فایل ضمیمه شده، مثالی با نام "تاریخ پیشفرض" وجود داره که فکر میکنم چیزی که شما لازم دارین همون باشه. یه نگاهی بهش بندازین.
به طور خلاصه باید از defaultDate استفاده کنید.
setdate
یه سوال دیگه؟ آقا من میخوام تاریخه datepicker رو set کنم چطور میتونم اینکارو کنم؟
خواستم از setdate خود jquery استفاده کنم اما error میده با اون
اینطوری زدم :
(myelementID).datepicker('setDate', date)$
setDate
این مشکل رو هم برطرف کردم. لطفا نسخه جدید رو بررسی کنید.
مشکل در IE
اولا تشکر کنم و بگم كه کارتون خیلی عالیه ،
اما من وقتی sample دانلودی خودتون رو دانلود کردم توی IE کار نمیکرد و error میداد و وقتی هم سعی کردم خودم اجرا کنم بازم توی IE ارور داد. میشه بهم بگید چرا؟
من همین آخرین ضمیمه رو دانلود کردم .
مشکل در IE
سلام،
خیلی ممنون از نظرتون و وقتی که گذاشتین،
مشکل از فایل calendar.js (و calendar.min.js) بود که در نسخه جدید برطرف کردم. این تقویم رو در نسخه آخر استفاده کرده بودم و ظاهرا به اندازه کافی تست نشده بود!
سلام دوست عزیز
سلام دوست عزیز
کارتون خیلی جالب بود
واقعا کار منو راه انداخت و حالا هر چقدر هم تشکر کنم فکر کنم کم باشه
امیدوارم که خدا اجر این کارتون رو بهتون بده...
باز هم ممنون
داشتن همزمان تاریخ شمسی و میلادی
سلام مهندس عزیز. ضمن تشکر از کار جالبی که انجام دادید.
من یک مشکل برخوردم. قالبا تاریخ رو در دیتابیش به صورت میلادی ذخیره میشه. و برای نمایش به شمسی تبدیل میشه.
حال مشکل من این هست که این پلاگین شما. کل خروجی ها رو شمسی میکنه. آیا امکانش هست که مانند "پرکردن فیلد اضافی" اون فیلد اضافی تاریخ میلادی باشه؟
استفاده همزمان از تاریخ شمسی و میلادی
سلام،
میتونین با یه ذره کدنویسی خودتون این کار رو انجام بدین. برای این کار میتونین با متد onSelect تاریخ انتخاب شده تقویم رو بگیرید و با استفاده از کلاس JalaliDate اون رو به میلادی تبدیل کنید و بعد ازش استفاده کنید. این مثال رو ببینید:
$('#datepicker').datepicker({ onSelect: function(dateStr, inst) { var selectedJalaliDate = new JalaliDate(inst.selectedYear, inst.selectedMonth, inst.selectedDay); var date = selectedJalaliDate.getGregorianDate(); alert(date.getFullYear() + '/' + (date.getMonth()+1) + '/' + date.getDate()); } });PS: الان که دوباره کدها رو نگاه کردم، دیدم که Gregorian رو قبلا اشتباه نوشته بودم! در نسخه جدید اصلاحش کردم. برای استفاده از این کد، نسخه جدید رو دانلود کنید (یا اینکه املای اشتباه قبلی رو استفاده کنید!) دقت کنید که چون تقویم استفاده شده در نسخه جدید رو عوض کردم، باید ارجاع فایل calendar.min.js رو هم اضافه کنید.
MooTools
خسته نباشید.
اگر اعداد هم فارسی میشدند که خیلی بهتر بود.
براتون امکان داره افزونهای هم بر MooTools بنویسید؟
یا اگر این کار قبلا شده، معرفی کنید.
MooTools
در مورد اعداد فارسی، فکر خوبیه. به احتمال زیاد این امکان رو اضافه خواهم کرد.
در مورد MooTools هم چون من زیاد تجربه ای در استفاده از این کتابخانه ندارم، نمیتونم افزونه ای براش بنویسم و اطلاعی هم در مورد کارهای مشابه ندارم. ولی تا اون جایی که من دیدم، نمونه خاصی پیدا نکردم.
استفاده برای چند تکس باکس در asp.net
با سلام خدمت مهندس هاشمی نژاد
دوست گرامی اگر قرار باشه تو یه صفحه برای چند تکس باکس از datepicker استفاده کنیم اون وقت چطور میشه توابع رو به تکس باکس ها ربط داد.
مثلا من 3 تکس باکس دارم که قرار از حالت datepicker1 استفاده کنه.
چطور میشه این حالت رو به سه تا تکس باکس وصل کرد.
نمیشه که سه بار کد datepicker1 رو نوشت
منتظر پاسخ شما هستم
با تشکر
استفاده از Selectorها
سلام؛
در این حالت شما میتونید از Selectorهای موجود در jQuery استفاده کنید و با یک دستور تمام TextBoxهای مورد نظر رو انتخاب کنید. به عنوان مثال میتونید به تمام TextBoxهایی که نیاز هست که در اینجا انتخاب بشن، کلاس datepicker رو بدین (یعنی "CssClass="datepicker رو برای TextBoxها قرار بدین) و بعدش اینجوری استفاده کنید (به قسمت استفاده از . بجای # دقت کنید):
$('.datepicker').datepicker();تشکر
خیلی تمیز کار کردید
هرچند از تقویم خودمون استفاده کردم ولی کد و با اجازه گرفتم
pe.cheraghi@gmail
کمک
مهندس دست گلت درد نکنه
یه سوال:
اگه دو تا datepicker داشته باشیم،و بخواهیم روز انتخاب شده تقویم اولی بشه Mindate تقویم دومی چکار باید کرد؟
باز هم ممنون ! خیلی مهندسی