وارد کردن تاریخ شمسی در نرم‌افزارهای تحت وب( Web Application ) به گونه‌ای که سازگاری با مرورگرهای مختلف و بیشترین کارایی فراهم شود یکی از دغدغه‌های مهم برنامه‌نویسان وب است.

تقویم فارسی جاوااسکریپت امیب

کاربران قدیمی: این نسخه( ۰.۲.۱ ) تغییرات مهمی داشته است که لازم است پیش از به‌روزرسانی آن‌ها را در اسکریپت‌های خود اعمال کنید

تقویم‌های گوناگونی توسط افراد مختلف نوشته شده‌اند که هر یک مشکلات خاص خود را دارند. برای از بین بردن تمامی مشکلات موجود، تصمیم گرفتم تقویم جدیدی با قابلیت‌های منحصربه‌فرد و بیشترین کارایی را از پایه طراحی و کدنویسی کنم

سه ویژگی مهم در تقویم ایجاد شده عبارتند از:

  • دقیق‌ترین الگوریتم محاسبه‌ی تاریخ با پشتیبانی از سال‌های خورشیدی تا سال ۹۹۹۹
  • شناسایی هوشمند بیش از ۱۸ مدل ورود دستی تاریخ توسط کاربر
  • تغییر ظاهر تقویم تنها با امکانات CSS

مهم‌ترین ویژگی این تقویم امکان ورود تاریخ به صورت دستی توسط کاربر است:
فرمت‌های قابل قبول برای ورود تاریخ عبارتند از:

  • ۹۰۰۸۱۴
  • ۱۴۰۸۹۰
  • ۱۳۹۰۰۸۱۴
  • ۱۴/۸/۹۰
  • ۹۰/۸/۱۴
  • ۱۴/۸/۱۳۹۰
  • ۱۳۹۰/۸/۱۴
  • ۱۴-۸-۹۰
  • ۹۰-۸-۱۴
  • ۱۴-۸-۱۳۹۰
  • ۱۳۹۰-۸-۱۴

و فرمت‌های ویژه:

  • ۰۸۱۴
  • ۱۴۰۸
  • ۱۴-۸
  • ۸-۱۴
  • ۱۴/۸
  • ۸/۱۴
  • ۱۴

در فرمت‌های ویژه که سال و ماه وارد نشده‌اند، سال و ماه فعلی به حساب خواهد آمد.
در فرمت‌هایی که سال مشخص نشده باشد، دو رقم ابتدایی در صورت امکان روز محاسبه خواهند شد

روش به‌کارگیری تقویم در صفحات وب


استفاده از این تقویم بسیار ساده است
ابتدا فیلد متنی خود را در متن صفحه قرار دهید:

<input type="text" id="pcal1" class="pdate">

سپس فایل جاوااسکریپت و قالب‌بندی CSS را در سرآمد فایل HTML قرار دهید:

<link rel="stylesheet" href="js-persian-cal.css">
<script src="js-persian-cal.min.js"></script>

دستور تبدیل فیلد متنی به فیلد تاریخ را در انتهای صفحه و در تگ اسکریپت قرار دهید:

<script>
	var objCal1 = new AMIB.persianCalendar( 'pcal1' );
</script>

پارامتر تعریف شده شناسه‌ی( id ) فیلد متنی است که به فیلد تاریخ تبدیل خواهد شد.

پارامتر دوم به تنظیمات اضافی اختصاص دارد و اختیاری است
پارامتر دوم شیءی درون‌خطی با فرمت JSON است. برای نمونه به مثال زیر توجه کنید:

<input type="text" id="pcal1" class="pdate">
<input type="hidden" name="extra" id="extra">
 
<script>
	var objCal1 = new AMIB.persianCalendar( 'pcal1',
		{ extraInputID: "extra", extraInputFormat: "YYYYMMDD" }
	);
</script>

دستور بالا سبب می‌شود فیلد اضافی با شناسه‌ی extra تاریخ را با فرمتی دیگر ذخیره کند
این قابلیت به برنامه‌نویسان در ارزیابی و تبدیل تاریخ یاری می‌رساند

گزینه‌های قابل تغییر - اختیاری


  • extraInputID : شناسه‌ی فیلد اضافی
  • extraInputFormat : فرمت فیلد اضافی
  • onchange: تابعی که هنگام تغییر تاریخ به صورت خودکار فراخوانی می‌شود( به مثال‌ها مراجعه کنید )
  • initialDate: تاریخ پیش‌فرض که هنگام ایجاد فیلد در آن قرار می‌گیرد.
  • defaultDate: چنانچه مقدار فیلد تاریخ معتبری نباشد و کاربر تقویم را باز کند، این تاریخ به او نشان داده می‌شود.
  • divPickerClassName : نام کلاس div اصلی حاوی تقویم برای قالب‌بندی
  • btnClassName : نام کلاس a دکمه‌ی تقویم برای قالب‌بندی

فرمت‌های قابل قبول برای فیلد اضافی عبارتند از:

  • YYYY سال میلادی - چهار یا پنج رقمی
  • MM ماه میلادی - دو رقمی
  • DD روز میلادی - دو رقمی
  • YY سال میلادی - دو رقمی
  • M ماه میلادی - یک یا دو رقمی
  • D روز میلادی - یک یا دو رقمی
  • yyyy سال خورشیدی - چهار رقمی
  • mm ماه خورشیدی - دو رقمی
  • dd روز خورشیدی - دو رقمی
  • yy سال خورشیدی - دو رقمی
  • m ماه خورشیدی - یک یا دو رقمی
  • d روز خورشیدی - یک یا دو رقمی
  • JD روز جولین( تعداد روزهای گذشته از یکم ژانویه سال 4713 پیش از میلاد مسیح(ع) )

فهرست قابلیت‌های تقویم شمسی جاوااسکریپت


  • تغییر ماه و سال با کلیک بر روی دکمه‌های قبل و بعد
  • تغییر ماه و سال با امکان انتخاب از فهرست
  • افزایش و کاهش تاریخ با استفاده از کلیدهای بالا و پایین در فیلد
  • امکان فعال و غیرفعال کردن تقویم به صورت موقت
  • تغییر تاریخ به تاریخ فعلی با کلیک بر روی لینک مخصوص
  • ارزیابی ورودی کاربر و تشخیص تاریخ با ۱۸ فرمت مختلف
  • تغییر قالب DatePicker تنها با تغییر در فایل CSS
  • تشخیص اعداد فارسی و لاتین
  • امکان تبدیل آنلاین تاریخ به فرمت‌های مختلف و ذخیره در فیلد اضافی
  • پشتیبانی از مرورگرهای مختلف
  • مصرف کم حافظه، سرعت و دقت بسیار بالا
  • حجم کم سرآمد( تنها ۱۴ کیلوبایت )
  • استفاده‌ی بسیار آسان

آزمون به صورت آنلاین


پوسته‌ی اصلی
پوسته‌ی تیره
پوسته‌ی فیروزه‌ای فسفری
پوسته‌ی هلویی

دریافت تقویم فارسی جاوااسکریپت - ویرایش ۰.۲.۱ - ۱۰ فروردین ۱۳۹۲


دانلود تقویم فارسی جاوااسکریپت

CDN


دسترسی به فایل اسکریپت از طریق CDN رایگان jsDelivr مقدور است. توجه کنید که این میزبان تضمینی برای پایداری ارائه نمی‌کند و استفاده از آن در پروژه‌هایی با اهمیت بالا توصیه نمی‌شود.

<script src="//cdn.jsdelivr.net/jspersiancal/0.2.1/js-persian-cal.min.js"></script>

jQuery


دوستان گرامی «حمید» و در تکمیل «صابر فتح‌اللهی» در کامنت‌ها روشی آسان برای تبدیل فیلدها به تقویم با کمک jQuery معرفی کردند:
1- در انتهای فایل اصلی اسکریپت کد زیر را اضافه کنید

( function( $ ) {
	$.fn.persianCalendar = function(extra) {
		return this.each( function( index, element ) {
			var id = jQuery(element).attr("id");
			new AMIB.persianCalendar( id, extra );
		} );
	};
})( jQuery );

2- با این قطعه کد می‌توان تمامی id‌هایی که مثلا با pcal شروع می‌شوند را تبدیل به فیلد تاریخ کرد:

jQuery("input[id^=pcal]").persianCalendar( {
	initialDate: '1392-10-20',
	defaultDate: '1392-10-20'
} );

۲۸۲ نظر در مورد «تقویم فارسی جاوااسکریپت»

  • سلام
    این تقویم لایسنس خاصی داره اجازه این هست که از ان در نرم افزارهای تجاری سورس بسته استفاده بشه
    چون الان یک تقویم جاوا اسکریپتی دیگه هست تحت gpl3 است و نمی توان در پروژه های غیر متن باز از ان استفاده کرد

  • با سپاس از تقويم زيبايتان
    من از ذخيره تاريخ از رشته 10 تايي استفاده مي كنم ولي اجازه ذخيره صفر را نمي دهد مثلا 1390/01/01 را به صورت 1390/1/1 ذخيره مي كند لطفا بررسي كنيد ممنون

    • امیرمسعود ایرانی می‌گوید:

      کامنت جدید:

      یکی از کاربران تقویم روشی جالب برای انجام این کار را استفاده کرده بودند
      ایشان شناسه‌ی فیلد اصلی را به عنوان فیلد کمکی هم وارد کرده بودند
      با این روش می‌توانید تاریخ را به هر فرمت دلخواه در فیلد اصلی نشان دهید که از آن جمله نمایش صفر قبل از ماه‌ها و روزهای یک رقمی است
      البته باید دقت کنید فرمت مورد نظر طوری باشد که برای تقویم قابل شناسایی باشد و مسئولیت این موضوع بر عهده‌ی برنامه‌نویس است

  • غفوری می‌گوید:

    سلام امکان این هست که به این کنترل قابلیت گرفتن زمان شامل ساعت و دقیقه و ثانیه را هم بهش اضافه کرد

    • امیرمسعود ایرانی می‌گوید:

      به این موضوع قبلا فکر کرده بودم
      پیاده‌سازی این کار طوری که رابط کاربری آسیب نبینه کار سختی است( با توجه به اینکه امکان تایپ وجود دارد و بعد از تایپ کاربر علاوه بر تاریخ، ساعت هم باید تشخیص داده شود )
      فعلا قصد ندارم این کار رو انجام بدم
      با این حال اگر کسی بخواهد این کار را انجام دهد از نظر من مشکلی ندارد و سورس فشرده‌نشده را در اختیارش قرار خواهم داد
      اگر می‌خواهید سیستمی جدید طراحی کنید بهتر است تاریخ و زمان را که دو موجودیت جدا هستند را در دو فیلد قرار دهید

  • سلام. ممنون از زحمتی که کشیدین. من عادت ندارم برای کدهای جاوااسکریپت مورد نیازم در سایت‌های فارسی بگردم، چون چیزی پیدا نمی‌شود. برای تقویم فارسی، جستجویی کردم و بعد از چندین جواب بی‌ربط، با ناامیدی به وبلاگ شما رسیدم و چیزی دیدم که نظیرش با این دقت، در مدل‌های خارجی‌اش هم کم‌یاب است. از این بابت بسیار سپاس‌گذارم.
    من در حال طراحی سایتی هستم که برای ویرایش اطلاعات، صفحات لایت‌باکس (JQuery) باز می‌کند و محتویات این صفحه‌ها از طریق AJAX فراخوانی می‌شوند و می‌دانیم که کدهای ارسالی به این طریق، قابلیت اجرای مستقیم جاوااسکریپت را ندارند. البته برای اجرای جاوااسکریپت‌های دل‌خواه، حقه‌ها و ترفندهای بسیاری وجود دارد، از جمله ایجاد روتینی برای دیده‌بانی Textboxهایی با IDهای خاص، که در صورت پیدا شدن یکی از این‌ها، کد داخلش اجرا شود. این روش به‌خوبی جواب می‌دهد، اما اعمالش برای کاری مثل ایجاد فیلد تاریخ، باعث پیچیده شدن وحشتناک صفحه می‌شود. برای رفع این مشکل، بعد از تعریف Textbox، آیکونی گذاشتم مشابه آن‌چه که در نمونه‌ی شما وجود دارد و کاربر با کلیک بر روی آن، کد جاوااسکریپت مورد نظر شما را اجرا می‌کند و آیکون بدل را هم محو می‌کند و به این ترتیب، تغییری در خروجی حاصل نمی‌شود. حسن انجام این کار را با یک Alert ساده کنترل کردم، اما بعد از آن، هیچ اتفاقی نمی‌افتد که نمی‌افتد.
    من از خیلی از کتابخانه‌های JQuery در کدهایم استفاده کرده‌ام و نمی‌دانم که آیا اجرا نشدن کد شما تقصیر آن‌هاست، یا مشکل از جای دیگر آب می‌خورد. حدس دیگرم این است که شاید برنامه به دنبال آدرس‌های خاصی برای بارگیری ملزومات خود می‌گردد که من به خاطر قرار دادن فایل‌های بسته در دو فولدر عقب‌تر، آن‌ها را از دسترس اسکریپت خارج کرده باشم.
    متأسفانه هیچ نسخه‌ی آپلودشده‌ای از آن‌چه که در دست انجام دارم، آماده نیست. البته ویرایش تاریخ فارسی، برای پروژه‌ی فعلی من که امروز و فردا باید برای تحویل آماده شود، لازم نیست، اما جاذبه‌ی آزمایش ابزاری به این زیبایی و ظرافت، مرا تا این نیمه‌های شب بیدار نگه داشت تا زیر و بمش را بررسی کنم.
    سرتان را درد آوردم. یک تشکر دیگر هم لازم است بکنم بابت ابزاری که برای ذخیره‌ی پنهانی تاریخ انتخاب‌شده‌ی کاربر به فرمت‌های دیگر پیش‌بینی کرده‌اید. فکر بکری است و بدون این، فکر می‌کنم ابزار شما برای بیش از هشتاد درصد برنامه‌نویسان به‌کلی بی‌فایده می‌شد.

  • شرمنده که دوباره مزاحم می‌شم و این‌جا رو شلوغ می‌کنم. مشکل من از این‌جا بود که شیء objCal1، چون از داخل تابع ویژه ساخته می‌شد، public نبود و بقیه‌ی توابع آن را نمی‌دیدند. من زیاد جاوااسکریپت بلد نیستم و این اندازه می‌دانم که برای تعریف یک متغیر عمومی، آن را باید بیرون از تابع تعریف کرد و راهی را نمی‌شناسم که از داخل یک تابع، متغیر عمومی تعریف کنیم. مشکل خودم را با «ماست‌مال» کردن حل کردم. یک شیء بیهوده از objCal1 را در ابتدای اسکریپت ساختم و بعد این شیء را مقداردهی کردم. می‌گویم بیهوده، چون در زمان تعریف این شیء، Textbox هنوز ایجاد نشده و بستگی به انتخاب کاربر دارد و خوشحالم که هیچ اخطار و اشکالی به وجود نیامد. امیدوارم روی همه‌ی مرورگرها این ماست‌مالی کار کند. اگر ایده‌ی استانداردی برای حل مشکل من دارید، ممنون می‌شوم راهنمایی بفرمایید.

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر از لطف شما

      برای اینکه از داخل تابع متغیری سراسری ایجاد کنید یکی از راه‌ها این است که تعریف متغیر را به صورت زیر انجام دهید:

      window[ 'objCal1' ] = ...;
  • سلام ممنون از کار بسیار خوبتون
    می خواستم ببینم امکانش هست که به جای اینکه ID یک فیلد رو بهش بدیم تا اونو تبدیل به فیلد تاریخ کنه ، از روندی استفاده بشه که بشه نام کلاسی که اون فیلد داره رو بهش داد تا تموم فیلدهایی که از اون کلاس هستند رو تبدیل به فیلد تاریخ کنه؟ (دقیقا مثل کاری که توابع jQuery انجام میده)

    • امیرمسعود ایرانی می‌گوید:

      اگر قرار باشد ایجاد شیء تقویم بر اساس class باشد و با توجه به دلیل شیءگرا بودن ایجاد تقویم
      نیاز است که اشیا داخل یک حلقه ایجاد شوند. به هر حال لازم است که inputها یک id داشته باشند
      یک کوتاه مانند نمونه کد زیر می‌تواند این کار را انجام دهد:

      var inputs = document.getElementsByTagName( 'input' );
       
      for( var i = 0; i < inputs.length; ++i ) {
       
      	if( inputs[ i ].type == 'text' && inputs[ i ].className == 'pdate' ) {
      		window[ 'objCal' + i ] = new AMIB.persianCalendar( inputs[ i ].id );
      	}
       
      }
  • با سلام وسپاس از کار خوبتون
    یه سوال دیگه ایا امکان این هست که تقویم در یه بازه زمانی محدود نمایش داده بشه مثلا از ۵ سال قبل تا امروز ویا برعکس
    ممنون

    • امیرمسعود ایرانی می‌گوید:

      سلام

      در حال حاضر این امکان در تقویم وجود ندارد
      بررسی تاریخ ورودی کاربر برای قرارداشتن در دامنه‌ی دلخواه کاری ساده است که با چند خط جاوااسکریپت قابل انجام است.
      ساده‌ترین راه این است که تاریخ را در فیلدی جداگانه با فرمت JD ذخیره کنید و محتوای فیلد اضافه را که یک عدد است با JD تاریخ ابتدا و انتها مقایسه نمایید

  • با سلام به شما
    ممنونم از اسکریپت خوبتون

    یه مشکل داشتم گفتم از شما بپرسم، ممنون میشم راهنمایی کنین

    من میخوام یه تاریخ شروع داشته باشم و یه مدت مدت اجرا (تعداد روز) که مدیر وارد می کنه (مثلا شروع 1391/03/03 به مدت 3 روز ) و میخوام این روزها رو محاسبه کنم و در یک dropdownlist نمایش بدم. (محتوای dropdownlist بعد از محاسبه -> 1391/03/03 - 1391/03/04 - 1391/03/05 ) نمیدونم چطوری میتونم یکی یکی روزها رو محاسبه و در dropdownlist بزارم؟؟

    • امیرمسعود ایرانی می‌گوید:

      یک اسکریپت کوتاه برای انجام این کار شما آماده کردم که تاریخ‌های مورد نظر شما رو alert می‌کنه
      اگر مشکلی در استفاده از این اسکریپت دارید لطفا در ایمیل پیگیری کنید

      var pdate = isPersianDate( A$( 'pdate1' ).value ),
      	new_pdate,
      	cur_jd;
       
      if( pdate ) {
      	cur_jd = persian_to_jd( pdate[ 0 ], pdate[ 1 ],  pdate[ 2 ] );
       
      	for( var i = 1; i <= 3; ++i ) {
      		new_pdate = jd_to_persian( cur_jd + i );
      		alert( new_pdate.join( "/" ) );
      	}
       
      }
    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در مورد «ساعت» در نظرهای قبلی توضیح دادم.
      در مورد نسخه‌ی جدید،
      نگارش فعلی به پایداری و اطمینان قابل قبولی رسیده
      برای اضافه شدن ویژگی‌های جدید باید فرصت پیدا کنم تا بتوانم این کار را انجام دهم

    • امیرمسعود ایرانی می‌گوید:

      هم‌اکنون هم امکان تعریف تنظیمات در هنگام ساخت تقویم وجود دارد
      اگر تنظیم خاصی را نیاز دارید آن را از طریق ایمیل برایم بفرستید تا در فهرست کارهای آینده قرار بگیرد
      amibct در سایت گوگل

  • سلام
    از ساعت برای ثبت در فرم می خواهم استفاده کنم , در واقع کافیه تقویم ساعت سیستم را به آخر تاریخ اضافه کنه و لازم نیست از ساعت به عنوان ورودی استفاده بشه
    در مورد تعریف تنظیمات در هنگام ساخت تقویم , در مثالهایی که زده شده فقط آیدی و نام وجود دارد اگر بتوانید مثالی که در آن همه تنظیمات وجود داشته باشد به مثالها اضافه کنید خیلی خوب میشود
    مثلا در موقع تعریف مشخص شود که تقویم در صفحه نمایش داده شود یا متصل به دکمه باشد,
    زمان به عنوان خروجی نمایش داده شود یا نه ,
    محدوده زمانی مشخص شود,
    نوع رنگ بندی تقویم مشخص شود,...
    متشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      مطلبی که قبلا هم در مورد ساعت اشاره کردم همین بود
      اضافه کردن ساعت فعلی کار آسانی است ولی به قول معروف «بزن برویی» به حساب می‌آید و این شیوه از کدنویسی را به هیچ وجه نمی‌پسندم. اضافه کردن ساعت فعلی در سمت اسکریپت کار ساده‌ای است و خودتان هم می‌توانید انجام دهید.
      در مورد تنظیمات، غیر از رنگبندی که کاملا توسط CSS انجام می‌شود بقیه‌ی ویژگی‌ها در تقویم وجود ندارد و باید در نسخه‌های بعدی پیاده سازی شود.
      لطفا در صورتی که ویژگی خاصی نیاز دارید از طریق ایمیل amibct در گوگل آن را برایم بفرستید تا بخش نظرها وبلاگ به «نظرها» اختصاص یابد.
      با تشکر

  • سلام
    مشکلم رو براتون ایمیل هم کردم.گفتم اینجا هم عنوان کنم تا دیگران هم استفاده کنن.
    از کد جاوااسکریپتی که نوشتین برای تقویم داشتم در پروژه ام استفاده میکردم که به یک مشکل برخوردم
    مشکلم اینه که نمیخوام کلیلک بر روی یک تاریخ ، اون مقدار به یک تسکت باکس اضافه بشه بلکه میخوام یک
    url
    درست کنم و مقدار رو گت کنم با کلیلک روی هر مقداری
    همچنین میخوام تاریخ شکسی نشون داده بشه برای کاربر ولی مقدار بصورت تاریخ میلادی ارسال بشه
    یعنی مقدار اصلی میلادی باشه
    یک راهنمایی میخواستم در این رابطه
    متشکر

    • امیرمسعود ایرانی می‌گوید:

      سلام
      یک form ایجاد کنید و دو input یکی از نوع text برای تقویم و یکی از نوع hidden برای ارسال تقویم میلادی به سرور ایجاد کنید
      اگر برای فیلد نوع text صفت name را مشخص نکنید محتوایش به سرور ارسال نمی‌شود. همان طور که در توضیحات بالا وجود دارد با مشخص کردن تنظیمات زیر می‌توانید به هدف خود برسید. فرمت تاریخ ارسالی به سرور را نیز می‌توانید به دلخواه مشخص کنید.

      <form method="get" action="server.php">
      	<input type="text" id="pcal1" class="pdate" />
      	<input type="hidden" id="pcal1_en" name="pcal1_en"/><br />
      	<input type="submit" />
      </form>
      <script>
      	var objCal1 = new AMIB.persianCalendar( 'pcal1',
      		{ extraInputID: "pcal1_en", extraInputFormat: "YYYYMMDD" }
      	);
      </script>
  • salam
    من از farsicalender.js استفاده کردم برای کنترل اینکه تاریخ وارد شده از تاریخ روز بیشتر نباشه یا کلا مقایسه تاریخ با تاریخ روز شمسی چیکارکنم؟
    برنامه شما این قابلیت رو نداره!!!
    کمکم کنید

    • امیرمسعود ایرانی می‌گوید:

      سلام
      ساده‌ترین کار اینه که یک فیلد hidden اضافی ایجاد کنید و به کامپوننت بگید که تاریخ رو با فرمت JD در اون فیلد ذخیره کنه
      فرمت JD یا روز ژولین عددی است که هر روز یکی به مقدارش اضافه می‌شود
      با مقایسه‌ی عدد محاسبه شده توسط کامپوننت و JD دلخواه می‌تونید به هدفتون برسید
      برای محاسبه‌ی JD روز فعلی از کد زیر استفاده کنید

      var d = new Date(),
      	todayJD = gregorian_to_jd( d.getFullYear(), d.getMonth() + 1, d.getDate() );

      بعد از اجرای این دستور، متغیر todayJD عدد JD متناظر با امروز رو نگهداری خواهد کرد
      این عدد در PHP هم به سادگی قابل محاسبه است
      می‌تونید همین عدد رو در بانک اطلاعاتی هم ذخیره کنید. مقایسه و مرتب‌سازی اون خیلی ساده‌تر از تاریخ است

  • كارتان عالي است . واقعا با ديدن يك پكيج به اين خوبي آن هم در يك سايت فارسي زبان شگفت زده شدم . خدا اجرتان بدهد .
    موفق باشيد

  • مرسی از پاسختون.
    این todayJD تاریخ روز شمسی رو نگهداری میکنه؟
    بعد چطوری این todayjd رو با تاریخ وارد شده توسط کاربر مقایسه کنم؟ میخام قبل از ذخیره تو دیتابیس مقایسه انجام بشه...تاریخ تولید وارد شده با تاریخ روز مقایسه بشه و اگه بیشتر بود مثلا یه پیغامی بده.

    • امیرمسعود ایرانی می‌گوید:

      بله
      todayJD یک عدد هست که معادل امروز است
      کامپوننت تقویم هم یک ویژگی دارد که می‌تواند JD روز انتخابی توسط کاربر را در یک فیلد ذخیره کند
      روش استفاده از این ویژگی در توضیحات وجود دارد
      شما می‌توانید این دو عدد را با هم مقایسه کنید و در صورت نیاز به کاربر هشدار بدهید
      لطفا در صورت حل نشدن مشکل از طریق ایمیل amibct در gmail گفتگو را دنبال کنید

  • سلام و درود و خداقوت بر استاد عزیز
    خسته نباشید و تشکر بابت زحمات بی دریقتون

    امکان نمایش inline برای این تقویم وجود نداره؟ یعنی نیازی به کلیک روی دکمه نباشه و همینجور از ابتدا باز نمایش داده بشود.

    ارادت و آرزوی مزید توفیقات

    • امیرمسعود ایرانی می‌گوید:

      سلام و تشکر از لطف شما

      برای باز کردن تقویم از طریق اسکریپت با استفاده از متد showHidePicker روی شیئی که ایجاد کردید می‌تونید این کار رو انجام بدید
      اگر منظور شما این باشه که تقویم همیشه باز باشه
      فعلا این امکان وجود نداره
      این گزینه را هم در برنامه‌ی پیاده‌سازی قرار می‌دم
      هر موقع که کمی فرصت پیدا کنم کارهایی هست که باید انجام بشه

  • آقا خیلی ممنون از این پروژه ، راضی باش ازش توی یک پروژه استفاده کردم و البته لینک وب سایت شما را هم درون سایت اضافه می کنم.

    با تشکر مجدد

  • امین حسینی می‌گوید:

    با سلام مجدد
    من در یک وب سایت تقویم فارسی شما رو بکارگیری کردم و مجدد از زحماتتون تشکر میکنم
    مخصوصا با فرمت های قابل قبول و ویژه ای که برای این تقویم استفاده کردین
    من تاریخ میلادی رو که در فیلد Extra نمایش داده میشه رو توی دیتابیس ذخیره کردم
    حالا موقع ویرایش تاریخ چطور اون رو به شمسی برگردونم که مجدد بشه تاریخ رو ویرایش کرد
    ممنون میشم اگه کمکم کنین .. آبا تقویم شما میلادی به شمسی رو هم تبدیل میکنه ؟
    مرسی

  • سلام و تشکر بابت تقویم بسیار عالی و زیباتون
    با اجازه شما یه تغییر کوچیک تو کدتون دادم استفاده اش راحت تر میشه
    1- در انتهای فایل اصلی اسکریپت کد زیر اضافه بشه

    (function($) {
    	$.fn.persiancalendar = function() {
    		return this.each(function (index, element) {
    			id = jQuery(element).attr("id");
    			new AMIB.persianCalendar(id);
    		});
    	};
    })( jQuery );

    2- با یک خط کد میشه تمامی آی دی هایی که مثلا با pcal شروع میشن رو تبدیل به فیلد تاریخ کرد:

    jQuery("[id^=pcal]").persiancalendar();
    • امیرمسعود ایرانی می‌گوید:

      سلام و تشکر
      هنوز به نظرم پروژه کمی کار داره تا به شرایط ایده‌آل برای متن‌باز شدن کامل تبدیل بشه
      کامنت‌های خیلی کمی در کد اصلی هست و کمی هم سیستم مدیریت رویدادها رو باید بهبود بدم
      از طرف دیگه فکر می‌کنم با یک محیط حرفه‌ای در میان برنامه‌نویسان ایرانی فاصله داریم و کمی برای این کارها زود است
      با این حال وقتی شرایط از همه نظر بهتر بشود انشاءالله این کار را می‌کنم
      با تشکر

      • با یک unminify ساده به حالت غیر فشرده دسترسی پیدا می‌کنیم...
        شما متن باز و اولیه رو توی github قرار بدید، مردم به مرور آپدیتش میکنن...
        از کامنت گذاریش تا جامع شدن ماژول‌ها، اومدن نمونه‌های تکمیل شده با زبان‌های برنامه نویسی متفاوت و...
        به قدری سیستم‌های مختلف توی GitHub هست که از همون نسخه‌های Minor شروع کردن و با کمک مردم بزرگش کردن.
        اگر هم بحث یادگیری گیت‌هاب‌ه : http://try.github.io/

        • امیرمسعود ایرانی می‌گوید:

          سلام
          کد فشرده نشده رو برای چند نفر فرستادم هیچ بازخورد مثبتی دریافت نکردم
          علتش هم همون نداشتن کامنت و فقر در زمینه‌ی برنامه‌نویسی جاوااسکریپت هست.
          استفاده از unminify هم کمک زیادی نمی‌کنه، چون کد فقط minify نشده، بهینه‌سازی هم شده قبلش هم کد پیچیده بوده
          غیرممکن نیست ولی بیش از حد سخته

      • امیرمسعود ایرانی می‌گوید:

        سلام
        در حال حاضر کمی گرفتارم
        سعی می‌کنم تا اندازه‌ای کامنت‌های کد را بیشتر کنم
        و در اولین فرصت اون رو منتشر می‌کنم

  • با سلام و خسته نباشید
    میخواستم بدونم این تقویم انتخاب کننده میلادی هم داره یعنی دیتا پیکرش به جای تقویم شمسی میلادی رو نشون بده و اونو بتونه در فیلد اضافی به شمسی تبدیل بکنه ؟

      • ولی اگر این امکان هم بهش اضافه بشه خیلی عالی خواهد شد
        چون در بعضی فرم ها کاربر نیاز داره بعضی از فیلد ها رو میلادی بزنه و بعضی دیگه رو فارسی ....
        مثلا برای ثبت یه بلیت پرواز خارج از کشور کاربر راحتره که تاریخ رو به میلادی بزنه و در ورود اطلاعات مشتری ،راحت تر اینه که تاریخ تولد فرد رو به شمسی وارد کنه ...
        عالی میشه اگر اینو تو نسخه های آینده به سیستم اضافه کنید ...
        خیلی هم تشکر از این اسکریپت عالی که زحمتشو کشیدید،حرف نداره ...
        فقط اگه تو جایی مثل github یا bitbucket منتشر میشد ما هم میتونستیم توی توسعه کد کمکتون کنیم ...

  • ممنون واقعا بعد از این همه سال دیدم که هنوز تقویم جای کار داره و چقدر زیبا شما اینکار رو انجام دادید ، ممنون از سورس ، امکانش هست که من از توابع شما جهت ایجاد کامپوننت در wpf استفاده کنم ؟ و قطعا ذکر میکنم منبع تمام سورس ها رو !

    بازم ممنون

  • میثم خوشقدم می‌گوید:

    سلام خسته نباشید
    بنده و همکارانی که با کتابخانه ارزشمند جناب عالی کار کرده اند1 مشکل اساسی داشتند.
    1- کتابخانه شما ماسک نمی گیرد یعنی بر اساس فورمت تاریخ درج / های بین ماه و روز گذاشته شود و کاربر نتواند برای تاریخ همچین مقداری وارد کند 6666661/1111/111
    اگر می تونید کتابخانه تون با لینک زیر ادغام نمایید.
    http://digitalbush.com/projects/masked-input-plugin/
    موفق باشید

    • امیرمسعود ایرانی می‌گوید:

      سلام و تشکر از لطف شما
      اگر دقت کرده باشید یکی از ویژگی‌های این تقویم دریافت تاریخ با فرمت‌های مختلف است
      مثلا 1205 یک عدد قابل قبول برای این فیلد است
      قرار دادن ماسک این ویژگی را از کار خواهد انداخت
      نگرانی شما از دو جهت می‌تواند باشد
      اول کارایی برای کاربر که با توجه به ۱۸ فرمت قابل قبول شاید جایی برای مطرح شدن نداشته باشد
      و نگرانی دوم دریافت تاریخ صحیح در سمت سرور که آن با کمک فیلد اضافی به فرمت دلخواه شما قابل دریافت است و خالی‌بودن آن نیز نشان می‌دهد که تاریخ نادرست بوده

      با تشکر

  • آسمان آبی می‌گوید:

    با سلام
    با تشکر از تقویم زیباتون
    یک سوال داشتم initialDate حتما باید فارسی باشه؟ (برای این که تاریخ امروز را برایش set کنیم)

  • با سلام و احترام وتشکر از راهنمایی های لازم , من از تقویم شما در کد jsp -java servlet page استفاده میکنم تمام بخش ها را درست عدد کرده ام اما نمیدونم چرا روی استایل ها مشکل دارد یعنی دکمه نمایش تقویم درکنار textboها قرارنمیگیرد آیا باید استایل را تغییرات داد

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در مورد بخش جاوا چیزی نمی‌دانم. برای اینکه متوجه بشوید اشکال نمایش تصویر چیست. با استفاده از Inspector در مرورگرهای Firefox یا Chrome روی محل نمایش دکمه کلیک کنید و بعد از اینکه محل دکمه را پیدا کردید، در بخش CSS بررسی کنید که محل اشاره شده برای تصویر درست است یا خیر. ممکن است لازم شود CSS را تغییر دهید یا محل ذخیره کردن تصویر را عوض کنید
      با تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای آگاه شدن از تغییر تاریخ توسط کاربر می‌توانید از رویداد onchange که مثال آن به همراه بسته موجود است استفاده کنید
      خالی بودن فیلد کمکی به معنی نادرست بودن تاریخ است
      به علاوه از تابع isPersianDate هم برای بررسی صحیح بودن یک تاریخ می‌توانید کمک بگیرید

  • با عرض سلام و خسته نیاشید

    یک سئوال داشتم . چطور میشه دوتا تقویم با فیلد extra برای هر کدومدر یک صفحه داشت؟ دوتا تقویم را با کدی که در بالا نوشتید ر یک صفحه آوردم ولی با فیلد extra نتونستم. این کار را برای فرم جستجو بر اساس یک بازه تاریخی می خواستم.

    با تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این کار مشکل خاصی ندارد
      دو فیلد اضافی ایجاد کنید و id هر کدام را به یکی از فیلد‌های اصلی مرتبط کنید
      اگر فرمت فیلد کمکی را به صورت JD تعریف کنید، مقایسه‌ی آن و جستجوی آن کار آسانی خواهد بود

      • سلام امیر آقا

        من یک چنین حالتی دارم که با گرید اتوماتیک ایجاد میشه

        می خواستم بدونم تو این حالت چون id ها یکسانند می توان با name که متفاوت برای هر input است آنها را تبدیل به تقویم کرد
        با سپاس فراوان.

        • امیرمسعود ایرانی می‌گوید:

          با سلام
          خیر این امکان وجود ندارد
          قرار دادن id منحصر‌به‌فرد برای هر عنصر کار آسانی است

  • سلام
    دستتون درد نکنه واقعا خیلی عالی بود دنبال یه پلاگین خوب برای تاریخ بودم که پیدا کردم 🙂

    فقط اگر امکانش بود که بر اساس کلاس المنت بشه اون ها رو استفاده کرد خیلی عالی میشد

    یعنی به جای ِ اینکه تک تک المنت ها رو با ای دی انتخاب کنیم به صورت کلاس تعریف میکردیم .

    باز هم ممنون 😉

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای این کار دو روش در همین صفحه وجود دارد
      یکی با کمک JQuery که در انتهای مطلب آمده است
      و راه دوم هم قطعی کدی که در کامنت‌ها قرار داده‌ام

      با سپسا

  • سلام
    ممنون از این تقویم زیبا و کاربردی
    من از این که تقویم رو توی UpdatePanel استفاده کنم به مشکل برخوردم
    یه دوستی گفت که از UserControl استفاده کرده!!
    اما من نمیدونم چطوری 🙁
    شما نمیتونین کمک کنین؟
    راه دیگه ای نداره؟
    ممنون
    🙂

    • امیرمسعود ایرانی می‌گوید:

      با سلام و سپاس
      من اطلاعات زیادی در مورد زیرساخت دات‌نت ندارم. اشیایی که شما می‌فرمایید در مرورگر وجود خارجی ندارند و نام‌های متناظر دات‌نت برای عنصرهای استاندارد وب هستند
      باید بررسی کنید که دات‌نت چه عنصرهایی را قبل و بعد تقویم قرار می‌دهد و اشکال ایجاد شده را برطرف بفرمایید

  • سلام
    بازهم تشکر میکنم از این حرکت زیبا

    من تونستم از این تقویم درون آپدیت پنل استفاده کنم
    گفتم شاید برای دیگران هم مفید باشه
    دلیل این که این تقویم درون آپدیت پنل کار نمیکنه اینه که اسکریپت ها فقط در هنگام لود صفحه یک بار اجرا میشن و
    وقتی که اطلاعات آپدیت پنل، آپدیت میشه تنظیمات تقویم از بین میره برای همین باید در هر بار آپدیت شدن صفحه توسط آپدیت پنل این تنظیمات یک بار دیگه اجرا بشن 🙂
    که برای این کار میتونین از این کد استفاده کنین و اونو توی پیج لود صفحتون کپی کنین:

    ScriptManager.RegisterStartupScript(
    	IdUpdatePannel,
    	this.GetType(),
    	"MyAction",
    	"var objCal1 = new AMIB.persianCalendar( 'pcal1' );",
    	true
    );
    • امیرمسعود ایرانی می‌گوید:

      با سلام
      من هم از اینکه اطلاعات خودتون را با دیگران به اشتراک می‌گذارید، سپاسگزاری می‌کنم

  • با تبدیل تابع A$ می شه از روش های دیگه هم استفاده کرد که برای من لازم بود:

    var A$=function(b){return (typeof(b)==="string")? document.getElementById(b):b}
    var element=someOtherFunction();
    new AMIB.persianCalendar(element);
  • با سلام من نیاز به تاریخ هایی با فرمت 16-07-1392 ضمنا در یک فرم دو تا تاریخ یکی برای شروع و یکی برای پایان جستجو می خوام قرار بدم لطف می کنید در این دو مورد کمک کنید
    با تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای مورد اول می‌توانید از فیلد کمکی استفاده کنید و یک تکنیک دیگر هم در کامنت‌ها شرح داده شده که می‌توانید آن را مطالعه کنید
      برای مورد دوم هم فعلا تقویم این کار را به صورت اتوماتیک انجام نمی‌دهد. ولی با استفاده از تابع onchange خودتان می‌توانید عملکرد مورد نیاز را پیاده‌سازی کنید

    • امیرمسعود ایرانی می‌گوید:

      با سلام و سپاس
      بنده با سیستم دات نت آشنایی ندارم. حتما اشکالی در ترتیب فراخوانی اسکریپت یا اشکالی در شناسه‌های فیلدهای متنی وجود دارد
      با بررسی سورس صفحه‌ی نهایی و کمک گرفتن از Error Console مرورگر بررسی کنید که اشکال از کجا ایجاد می‌شود

  • با سلام و تشکر به خاطر این تقویم خوب
    من یک مشکل دارم با این تقویم و اونم اینه که وقتی فرمی دارای تگ باشه و تقویم در خط قبل در بالای آن تگ استفاده بشه تقویم میره زیره تگ SELECT . این مساله فقط در IE6 اتفاق می افته . ممنون میشم اگه بررسی کنید .

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      مرورگری که شما فرمودید( اسمش را نمی‌برم 🙂 ) چندین سال است که از رده خارج به حساب می‌آید
      لطفا از مرورگرهای به‌روز استفاده کنید
      پشتیبانی کامل از مرورگرهای قدیمی مثل موردی که شما فرمودید، نیازمند صرف زمان زیاد است و افزایش بی‌دلیل حجم کد را سبب می‌شود
      با سپاس

  • سلام من توی پروژه خودم از این برنامه استفاده میکنم

    چطوری میتونم عکس کنار تاریخ رو حذف کنم ؟
    نمی خوام کنار input هام یک عکس تاریخ ظاهر بشه ممنون میشم راهنماییم کنید

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      یکی از تنظیمات( option ) که می‌توانید به آن مقدار بدهید «autoCreateButton» است
      یعنی به صورت زیر:

      var cal = new AMIB.persianCalendar( 'pcal1',
          { autoCreateButton: false }
      );
  • ایلیا اکبری فرد می‌گوید:

    با سلام. برای حالتیکه بخواهیم تشخیص دهیم مقدار ورودی توسط کاربر ، معتبر است یا خیر ، آیا تابعی وجود دارد. بطور مثال در رویداد onchange هرگاه مقدار غیر معتبر بود استایل خاصی را به input اعمال کنم. با تشکر.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اگر هدف شما فقط تابع onchange باشد، این تابع به صورت پیش‌فرض تاریخ را ارزیابی می‌کند و اگر مقدار ارسالی صحیح نباشد مقدار false به تابع شما ارسال می‌شود
      برای ارزیابی تاریخ‌های دیگر هم می‌توانید از تابع isPersianDate استفاده کنید که یک رشته دریافت می‌کند و اگر بتواند آن را صحیح تشخیص دهد آرایه‌ای شامل تاریخ فارسی را برمی‌گرداند. در غیر این صورت مقدار false در خروجی قرار می‌گیرد

  • با سلام

    آیا امکان دارد این تقویم رو بصورت Selectable استفاده کرد ؟ یعنی همزمان بشه چند تاریخ توسط کاربر انتخاب بشه و در یک TextBox نمایش داده بشه .

  • با سلام و تشکر
    داشتم با پلاگین jquery Dialog کار میکردم ولی dialog در وسط صفحه باز نمیشد بعد از کلی ازمون و خطا متوجه شدم وقتی اسکریپت تقویم رو لود میکنم این مشکل بوجود میاد. امکانش هست براتون چک کنید مشکلش برطرف بشه.
    سپاسگذارم

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در حال حاضر تقویم با دوبار کلیک باز می‌شود
      باید یک گزینه برای انتخاب بین دو حالت قرار بدهم
      انشاء‌الله در نسخه‌ی بعدی این تغییر هم انجام خواهد شد

    • سلام
      اول از همه خیلی ممنون از این اسکریپت واقعا عالی که هیچ نقصی نداره
      دوم در جواب دوستمون کافی این کد
      ondblclick=function(a)
      رو در فایل
      js-persian-cal.min.js
      پیدا کنی
      و به این تغییرش بدی
      onclick=function(a)

  • کاری فوق‌العاده ارزشمند، اما سرشار از کمبود امکانات، بالاخص:
    ۱- callback برای رویدادهای مختلف
    ۲- نمایش تقویم به صورت باز شده بر روی صفحه (نه به صورت popup)

    • امیرمسعود ایرانی می‌گوید:

      با سلام و سپاس
      در مورد رویداد callback لطفا هر موردی که فکر می‌کنید نیاز است و در تقویم درج نشده، بفرمایید.
      در مورد popup اگر منظورتان باز شدن پنجره‌ی جدید است، که این کار به دلیل وجود popup blocker روی مرورگرها غیرمنطقی و غیرقابل توجیه است

  • سلام
    برای استفاده در جی کوئیری با استفاده از فیلدهای اضافی می توان مانند زیر عمل کرد:
    ابتدا تابع زیر را به انتهای فایل اسکریپت اضافه کرد.

    ( function( $ ) {
    	$.fn.persiancalendar = function(extra) {
    		return this.each( function( index, element ) {
    			id = jQuery(element).attr("id");
    			new AMIB.persianCalendar( id, extra );
    		} );
    	};
    })( jQuery );

    و برای استفاده به این طریق می توان عمل کرد:

    jQuery("#myDate").persianCalendar({
    	initialDate: '1392-10-20',
    	defaultDate: '1392-10-20'
    });
    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در این نگارش تقویم، امکان عوض کردن شکل تاریخ در فیلد اصلی وجود ندارد
      با استفاده از فیلد کمکی که توضیحات آن در قسمت بالا درج شده است، می‌توانید این کار را انجام بدهید
      اگر شناسه‌ی فیلد کمکی را مساوی فیلد اصلی قرار بدهید، تاریخ با فرمت دلخواه در فیلد اصلی ذخیره می‌شود

  • سلام؛
    آقا من میخوام این تقویم رو توی یکی از فیلد های یک جدول که تعداد سطرهای جدول بصورت دینامیک میتونه اضافه بشه استفاده کنم یعنی کاربر روی + کلیک میکنه و یک سطر به سطرهای جدول اضافه میشه ولی تقویم فقط برای اولین سطر کار میکنه و نمیدونم object رو برای سطرهای دیگه بصورت دینامیک چطوری ایجاد کنم.
    میشه راهنمایی کنین؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در قطعه کدی که ارسال فرموده بودید، از دستور clone برای اضافه کردن ردیف به انتهای جدول کمک گرفته بودید
      باید دو خط پس از این دستور اضافه بفرمایید تا مشکل شما حل شود
      اول، تخصیص یک شناسه‌ی منحصربه‌فرد به فیلد تاریخ موجود در ردیف جدید

      $( 'tr:last input' ).attr( 'id', 'datePicker' + rowCount );

      و دستور دوم، ایجاد یک فیلد تاریخ جدید با استفاده از شناسه‌ی بالا

      window[ 'dp' + rowCount ] = new AMIB.datePicker( 'datePicker' + rowCount );

      قطعه کدها آزمایش نشده و ممکن است خطایی جزئی داشته باشند

  • دست شما درد نکنه آقای امیر مسعود. کار بسیار حرفه ای، پراستفاده و عالیی ارائه داده اید و من هم به سهم خود تشکر میکنم. من لازم است که تاریخ میلادی را به شمسی تبدیل کنم:

    چگونه میتوان تاریخ میلادی را به عنوان ورودی به این تقویم داد؟

    من در کامنتهای بالا مشابه این سوال را دیدم اما جوابی نیافتم.

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر
      بهترین راه این است که تاریخ را در سمت سرور به شمسی تبدیل کنید. با این حال
      یک قطعه کد در کامنت‌های بالا هست که از دستور gregorian_to_jd در آن استفاده شده
      و همچنین یک تابع دیگر هم هست به اسم jd_to_persian که همراه بسته وجود دارد
      jd یا julian day یک مدل تاریخ عددی است. برای تبدیل تاریخ میلادی به شمسی، اول تاریخ میلادی را با کمک کدی که بالاتر عرض کردم به jd تبدیل کنید بعد با استفاده از jd_to_persian آن را به تاریخ شمسی تبدیل و از آن استفاده کنید
      در نگارش جدید تقویم که به دلیل مشغله‌ی زیاد هنوز منتشر نشده، نیازی به انجام این کار نیست و تبدیل تاریخ میلادی و شمسی در کامپوننت تعبیه شده است

  • سلام خدمت آقای امیر مسعود عزیز
    اولا خدا خیرت بده دوما خدا خیرت بده سوما هم خدا خیرت بده

    امیر اقا واقعا ازتون ممنونم,
    خیلی کار مارو راحت کردین یعنی از راحت هم یک چیزی اونترفتر شد 😀

    انشالله همیشه موفق باشی

    خدا به همرات

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر
      در این نگارش، امکان انجام این کار وجود ندارد
      با استفاده از فیلد کمکی می‌توانید تاریخ را به فرمت دلخواه به سرور بفرستید
      اگر در کامنت‌های بالا نگاه کنید، با یکی دادن شناسه‌ی فیلد اضافی در فیلد اصلی، می‌تونید تاریخ رو به فرمت دلخواه در فیلد اصلی نشون بدید
      که من این کار رو توصیه نمی‌کنم

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      ساده‌ترین راه اینه که از سمت سرور تاریخ روز رو بگیرید و در فیلد قرار بدید
      برای استفاده از جاوااسکریپت:
      با استفاده از توضیحات این کامنت هم می‌تونید روش گرفتن تاریخ روز رو در اختیار داشته باشید
      درج یک تاریخ خاص به صورت پیش‌فرض هم در مثال‌ها موجود است
      با سپاس

  • امیرعلی حسین خان می‌گوید:

    با سلام

    خیلی خوب بود اگر زمان هم می توانستید در آن بگنجانید. تا بتوان ساعت و دقیقه را نیز در فرم ها استفاده نمود.

    با سپاس

    • امیرمسعود ایرانی می‌گوید:

      با سلام و سپاس
      نگارش جدید تقویم که این قابلیت را در خود دارد حاضر است
      و متاسفانه همچنان به دلیل کمبود وقت قادر به انتشار آن نبوده‌ام
      امیدوارم بتوانم هر چه زودتر صفحه‌ی جدید تقویم و مستندات لازم را بنویسم تا نگارش جدید منتشر شود
      با سپاس دوباره

  • مهدی علیدوست می‌گوید:

    با سلام و تشکر بابت تقویم شمسی
    نکته ای که به نظر می رسد این است که برای تقویم از فرمول معروف به 2820 ساله استفاده شده است. که این روش با قاعده رسمی تقویم شمسی کشور در برخی سالها همخوانی ندارد. به عنوان مثال سال 1403 سال کبیسه است ولی در فرمول بکار رفته توسط شما سال 1404 کبیسه اعلام شده است. روش رسمی که فعلا از آن استفاده می شود دوره 33 ساله است.
    مقاله های زیادی در این باره از اهل فن موجود است که می تواند مشخص کننده تفاوت های دو سیستم باشد.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      از دقت و راهنمایی شما سپاسگزارم
      در اولین فرصت سعی می‌کنم برای پیدا کردن یک راه حل مناسب کارهای لازم را انجام بدهم

  • سلام
    می خواستم بدونم آیا کد جاوا اسکریپت شما امکان تبدیل تاریخ شمسی به میلادی و بلعکس رو هم داره یا نه ؟ اگه میشه چطوری ؟

    می خوام در یک لیست ( مثلا گرید )بصورت جاوا اسکریپت تاریخ ها رو تبدیل کنم و نمایش بدم

    تشکر فراوان

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      بله
      با استفاده از چهار تابع gregorian_to_jd، persian_to_jd، jd_to_gregorian و jd_to_persian که روش استفاده از آن‌ها در کامنت‌های بالای موجود است، می‌توانید تاریخ‌ها را به یکدیگر تبدیل کنید
      با واسط قرار دادن jd می‌توانید از تاریخ میلادی به شمسی و شمسی به میلادی عملیات تبدیل را انجام بدهید

  • ایلیا اکبری فرد می‌گوید:

    با سلام و سپاس فراوان.
    میخواهم وقتی کاربر روی کامپوننت ، کلید space را فشار داد، تاریخ امروز درون کامپوننت نمایش داده شود. تابعی که تاریخ امروز را بر میگرداند چیست؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر
      برای غیرفعال کردن تقویم می‌تونید ویژگی enabled رو روی شیء تقویم به false تغییر بدید

      var pcal1 = ...
      pcal1.enabled = false;
  • با عرض سلام مجدد
    من یه مشکلی دارم، میخواستم اگه ممکنه راهنمایی بفرمایید.
    موضوع اینه که من دوتا کنترل تقویم دارم که هر کدوم یه فیلد اکسترا برای ذخیره مقدار میلادیشون دارند و مقدار تقویم دوم به اولی وابسته است، یعنی میخوام مقدار تاریخ دوم از تاریخ اول بزرگتر باشه، اینو من توی رویداد onchange هندل کردم، به این صورت که اگه کاربر مقداری وارد کرد که بیشتر از تاریخ اولی بود بعد از نمایش پیغام مناسب، مقدار تاریخ دوم رو برابر با تاریخ اول میذاره( یعنی حداقلی که میتونه داشته باشه) و این کار رو هم با توابع jQuery انجام دادم. حالا مشکل اینجاست که وقتی مقدار یک تقویم دستی عوض نشه و با توابع jQuery صورت بگیره ظاهرا مقدار فیلد اکسترا تغییر نمیکنه، درسته؟ و این باعث شده هر جا دستی عوض نشه من به نتیجه اشتباه برسم. آیا راهی وجود داره بتونم این مشکل رو هندل کنم؟ ممنون میشم کمکم کنید.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      لطفا برای پر کردن تاریخ از دستور fillDateField روی شیء ایجاد شده تقویم استفاده کنید

      var pcal1 = ...
      pcal1.fillDateField( '1393/3/15' );
      // or
      pcal1.fillDateField( [1393,3,15] );
  • مگه ادعا نمی‌کنید که این نرم‌افزار تحت لیسانس GNU General Public License هست؟ پس چرا لینک دانلود کد سورستون رو نمی‌تونم پیدا کنم؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در مجوز GPL الزامی وجود ندارد که سورس اصلی همراه بسته‌ی دانلودی وجود داشته باشد. تا امروز هم هر کسی که درخواست ارسال سورس را داشته بنده برایش ارسال کرده‌ام.
      برای شخص شما البته روش تفاوت دارد. در صورت تمایل یک درخواست رسمی از طریق ایمیل amibct در gmail ارسال بفرمایید و آدرس خودتان را بفرستید تا پس از دریافت هزینه‌های مربوطه آن را روی سی‌دی برایتان بفرستم
      با تشکر

  • دوست عزیز بسیار تقویم عالی است. از شما بسیار متشکرم.
    اگر امکانش هست در فیلد Extra قابلیت ثبت مقدار تاریخ به صورت float مطابق با smallDate و Datetime2 محیط SQL Server را نیز اضافه کنید.

    در هر صورت تقویم بسیار مناسبی می باشد. ممنوت از زحمات شما

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      هر بار که صفحه بارگزاری می‌شه دستورات تبدیل فیلد متنی به فیلد تقویم هم باید صدا زده بشه
      علاوه بر بخشی که شما این کد رو نوشتید، در یک بخش دیگر که بعد از PostBack هم فراخوانی می‌شه باید این کد رو تکرار کنید

    • از این اسکریپت استفاده کن:

      ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "tmp", "var objCal1 = new AMIB.persianCalendar( 'pcal1' );", false);
  • دوست خوبم به خاطر زحمتی که کشیدد و وقتی که گذاشتد بسیار سپاسگذارم. تقویم شما واقعا بهترین تقویم فارسی از این نوع روی وب هستش.
    بنده یک درخواستی دارم و اون اینکه تقویم رو طوری بنویسی که با یک کلیک کردن روی فیلد باز شه. در حالت عادی کاربر نمی دونه که باید برای باز شدن تقویم دوبار روی آن کلیک کنه که این باعث می شه که فکر کنه این یک فیلد تکست معمولیه. و خوب به نظر من این اشکال بزرگیه.
    البته من نظرات رو که می خوندم دیدم که یک نفر دیگه هم همین مشکل رو بیان کرده بود و فرموده بودید که این مشکل رو برطرف می کنید. حالا من نمی دونم وقت کردید یا نه.

    متشکرم . موفق باشید.

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر
      برای انجام این تغییر می‌توانید فایل اسکریپت را باز کنید و عبارت ondblclick را با onclick عوض کنید
      با تشکر

  • من در چند پروژه اخیر از این تقویم استفاده کرده ام. بسیار عالی! واقعاً دستتون درد نکنه. تقریبا همه احتیاجات من رو رفع کرده.(استفاده در دات نت با حداقل کد، بدون نیاز به تغییر کد ها ، کاملاً کارآمد... )
    قصدم این بود که مجدداً از شما برای زحمت بسیاری که کشیدید تشکر کنم. خدا خیرتون بده.

  • سلام خسته نباشید
    ممنون از تقویم بسیار عالی تون
    من تو یکی از پروژه هام به یک مشکل برخوردم
    و اونم اینه که میخوام بدونم که مثلا امروز که یکشنبه 30 شهریور 1393 هست ، 30 شهریور سال 1394 چند شنبه میشه؟
    همینطوری به سمت سال های بعدی و قبلی (30 شهریور سال 1398 شهریور سال 1370 شهریور سال 1362)

    ممنون میشم یک راهنمایی بفرمایید که بدونم چجوری باید عمل کنم
    تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اگر منظور شما استفاده از جاوااسکریپت باشد، دو راه ساده وجود دارد
      دستور getDay روی شیء Date در جاوااسکریپت روز هفته را بر می‌گرداند
      همین طور، محاسبه‌ی باقیماده‌ی تقسیم تاریخ JD بر عدد ۷ می‌تواند شما را به نتیجه برساند.
      برای تبدیل تاریخ شمسی به تاریخ میلادی یا JD می‌توانید از چهار تابع gregorian_to_jd، persian_to_jd، jd_to_gregorian و jd_to_persian که روش استفاده از آن‌ها در کامنت‌های بالای موجود است استفاده کنید.

  • با تشکر از شما. یه سوال. چطور میشه تاریخ رو به حروف تبدیل کرد به همراه روزش؟
    مثال : ۱۳۹۳/۰۷/۰۳ –> پنج شنبه ۳ مهر ۱۳۹۳

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در مورد سال و روز ماه که مشکلی وجود ندارد.
      ماه (مهر) و روز هفته(پنجشنبه) متغیرهایی هستند که باید محاسبه شوند
      ماه هم که با استفاده از یک آرایه قابل محاسبه است. تنها روز هفته است که نیازمند انجام محاسبات است
      با استفاده از دستور getDay روی شیء Date این کار شدنی است.
      همچنین می‌توانید تاریخ شمسی را با استفاده از دستور persian_to_jd که مثال آن در کامنت‌های قبلی موجود است، به فرمت JD تبدیل کنید و با محاسبه‌ی باقیمانده‌ی تقسیم JD بر ۷ به روز هفته برسید.

  • آریا رادمند می‌گوید:

    سلام،

    آقا با تشکر از به اشتراک گذاشتن اسکریپت خوبتون، جسارتا در تکه کد jQuery دوم persiancalendar باید با حرف c کوچک نوشته بشه با توجه به اینکه در تکه کد اول تابع با c کوچک تعریف شده.

    jQuery("#myDate").persiancalendar({
    	initialDate: '1392-10-20',
    	defaultDate: '1392-10-20'
    });
  • سامان حقیقی می‌گوید:

    سلام و خسته نباشید

    آقای امیرمسعود جان می خواستم از زحمات شما بابت تهیه و انتشار این کار زیبا تشکر کنم و سلامتی و موفقیت هر روز شما را آرزومندم

    اراتمند سامان

  • با سلام
    فقط خواستم واقعا تشکر کنم از کمکی که به بسیاری از افراد ایرانی کردید.
    البته از اینکه می بینم این کد بدون دخالت جی کوئری کار مینه واقعا خوشحال شدم زیرا دیگه با افکتهای دیگه در صفحه قاطی نمیشه.
    واقعا ممنون.

  • عذرخواهی میکنم که وقتتونو میگیریم
    یک سئوال دیگه دارم که اگر من خواسته باشم کاری کنم که تقویم زمانی بازشود که کاربر روی

    کلیک کند باید چیکار کنم ؟ ممنون
    یعنی همانند کلیک بر روی a.pcalBtn

    • امیرمسعود ایرانی می‌گوید:

      برای باز کردن تقویم، باید از متغیری که موقع ایجاد تقویم مشخص کردید، استفاده کنید
      مثلا:

      var a = new AMIB.persianCalendar( 'pcal1' );
      a.showHidePicker();
  • با سلام و تشکر فراوان از زحمات شما ، در تدوین چنین ابزاری
    می خواستم بدانم ساده ترین راه برای استفاده از چند یا چندین فقره از فیلد تاریخ مختلف در یک صفحه ، ترجیحا بدون jquery و با حداقل تغییر در کد اصلی چیست ؟ ( نتوانستم پاسخم را در میان پرسش و پاسخها بیابم )
    در پاسخ یکی از دوستان فرموده اید که نسخه جدید با خروجی و فرمت YYYY/MM/DD آماده آپلود است و مشکل کمبود فرصت است . آقا قربونت ، انتظار طولانی شده !

    • امیرمسعود ایرانی می‌گوید:

      با سلام

      در کامنت‌های بالا یکی از کاربران روشی برای ذخیره سازی تاریخ اصلی با فرمت دلخواه در فیلد اصلی معرفی کرده بودند
      با مشخص کردن فیلد اصلی هم به عنوان محل ورود محتوا و هم به عنوان فیلد اضافی می‌توانید به هدفتون برسید
      نگارش جدید تقویم آماده است ولی همچنان درگیر کارهای ناتمام هستم و فرصت نوشتن مستندات برای آن را نکرده‌ام
      به دلیل تغییرات بنیادین، استفاده کردن از این نگارش بدون مستندات هم تقریبا کار مشکلی است
      و یک دلیل دیگر هم اینکه نگارش جدید قرار است در دو نگارش استاندارد و حرفه‌ای منتشر شود که هنوز این تقسیم‌بندی هم انجام نشده است
      نوشتن یک تقویم که بدون مشکل روی مرورگرهای مختلف کار کند کار بسیار سختی است. با وجود گذشت چند سال از توسعه‌ی این تقویم هنوز هر از چندگاهی اشکال‌های جدید در آن پیدا و برطرف می‌شود.

      با تشکر

  • سلام بر شما...
    از کار با ارزشتون قدر دانی میکنم...
    خیلی کار خوب و خوش دستی هست نسبت به سایر تقویم هایی که دیدم.
    پیمایش سال که داخلش گذاشتید شدیدا کارم رو راه انداخت.
    امیدوارم موفق باشید در تمامی مراحل زندگیتون...

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      چنین امکانی در تقویم وجود ندارد
      برای انجام این کار اگر با جاوااسکریپت آشنایی کافی داشته باشید، باید کد فشرده نشده تقویم را برایتان ارسال کنم تا امکانات لازم را به آن اضافه کنید
      یا اگر روزهای مورد نظر قبل از تاریخ خاص یا بعد از تاریخ خاصی باشند، این امکان در نگارش حرفه‌ای تقویم که به صورت تجاری قابل تهیه است، موجود است
      لطفا برای ادامه گفتگو از ایمیل amibct در gmail استفاده کنید.
      با تشکر

  • سلام

    چجوری میشه تاریخ رو از آبجکت گرفت؟
    var t = new AMIB.persianCalendar('from_cal')

    چه متدهایی از t رو باید صدا زد تا مثلا تاریخ رو بهمون برگردونه؟

    ممنون

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای خواندن مقدار تاریخ، از دستورات معمول جاوااسکریپت روی فیلد اصلی و فیلد کمکی استفاده کنید
      شیئ ایجاد شده در سازنده‌ی بالا تاریخ را در خود نگهداری نمی‌کند

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این اشکال در نگارش جدید تقویم برطرف شده است که به علت کمبود زمان برای نوشتن مستندات و اصلاحات نهایی هنوز منتشر نشده است
      امیدوارم در ابتدای سال آینده نسخه‌ی جدید قابل انتشار باشد
      در حال حاضر اگر با جاوااسکریپت آشنایی کافی داشته باشید، اعلام بفرمایید تا کدهای فشرده نشده نسخه‌ی فعلی را برای شما ارسال کنم تا مشکل را برطرف نمایید
      با سپاس

      • سلام
        تشکر از لطفتون، با جاوا اسکریت هم کم و بیش آشنایی دارم، ولی اگر فکر میکنید ظرف چند هفته آینده نسخه جدیدش آماده بشه، ترجیح میدم صبر کنم. کارهای دیگری هست که میشه در این مدت انجام داد

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این نسخه از تقویم از تاریخ میلادی پشتیبانی نمی‌کند
      نگارش حرفه‌ای که به صورت تجاری قابل خریداری است، این امکان را در اختیار شما قرار می‌دهد که به انتخاب شما یا به انتخاب کاربر، تاریخ شمسی یا میلادی دریافت شود و شمسی یا میلادی به انتخاب شما به سرور ارسال گردد
      در صورت تمایل به کسب اطلاعات بیشتر، با ایمیل amibct در gmail مکاتبه بفرمایید

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای انجام این کار باید سورس تقویم را تغییر بدهید، در صورتی که مهارت کافی برای ویرایش کدهای جاوااسکریپت را دارید، لطفا از طریق ایمیل amibct در gmail برای بنده پیامی ارسال بفرمایید تا سورس فشرده نشده را برایتان بفرستم

  • با سلام و تشکر از زحمات شما

    آیا می‌توان مقدار وارد شده در فیلد اصلی (تاریخ شمسی) توسط این اسکریپت ماه و روز را دو کاراکتری محاسبه کند.

    یعنی الان مثلا ۰۱۰۸ را به ۱۳۹۶/۸/۱ تبدیل می کند در حالی که ۱۳۹۶/۰۸/۰۱ مورد نظر من است.

    توضیحی داده بودید که شناسه‌ی فیلد اصلی را به عنوان فیلد کمکی می‌شود استفاده کرد. با این کار مقدار معادل میلادی در فیلد قرار می‌گیرد و نه شمسی.

    ظاهرا در فیلد کمکی معادل میلادی تاریخ شمسی وارد شده، قرار می گیرد، تصور من مقدار شمسی با هر فرمت دلخواه بود.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اگر فرمت فیلد اضافی شما میلادی باشد، با نگارش فعلی تقویم، نمی‌توانید این کار را انجام دهید.
      نگارش جدید و تجاری تقویم این امکان را دارا می‌باشد.
      اگر با کدنویسی جاوااسکریپت هم آشنایی داشته باشید، می‌توانم کد فشرده نشده تقویم را برایتان ارسال کنم تا امکان فوق را به آن بیفزایید.
      در صورت تمایل به استفاده از گزینه‌های فوق، لطفا با ایمیل بنده amibct در gmail مکاتبه بفرمایید.

      • با سلام مجدد

        منظورتان از اگر فرمت فیلد اضافی شما میلادی باشد، برایم روشن نیست. در مثال‌های شما YYYYMMDD فرمت فیلد اضافی است که قابل فهم است.
        حالا فرمت شمسی چه می‌تواند باشد؟

  • چطور میتوان تابعی را هنگامیکه تاریخ انتخابی بر روی input مورد نظر شما ست میشود، فراخوانی نمود؟
    بهتر نبود تقویم طوری دیده میشد که بعد از ست شدن تاریخ بر روی input مورد نظر، تابع onchange همان input نیز فراخوانی شود؟
    برای مثال میتوانید لینک زیر را مشاهده کنید:
    https://stackoverflow.com/questions/6471959/jquery-datepicker-onchange-event-help

  • با سلام
    و تشکر بابت کار خوب شما
    یک سوال داشتم
    چرا وقتی با jquery تابع click برای a.pcalBtn را صدا می کنیم، کار نمی کند و تقویم را باز نمی کند؟

  • امیر آقا سلام، ممنون بابت این مطلب مفید.
    من یه پروٰژه با انگولار ۴ مینویسم یه تقویم شمسی درست و حسابی پیدا نکردم تا اینکه مطلب شما رو دیدم و برای نیاز من خیلی مناسب هست. اما سوالم اینه شما میتونید راهنمایی کنید چه جوری این رو به پروژه اضافه کنم؟ فایل های css و js رو به ndex اضافه کردم اما فقط اون دستور سوم برای تبدیل به تاریخ رو نمیدونم چه جوری توی پروژه اضافه کنم؟
    ممنون اگه راهنمایی کنی.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در این خصوص اطلاعاتی ندارم. لازمه که تسلط کافی به Angular داشته باشید و با مطالعه‌ی مستندات تقویم این دو را با هم هماهنگ کنید

  • سید سعید اسلامی می‌گوید:

    با سلام . در ابتدا تشکر ویژه و فرآوان دارم ازتون . حدود یک سال هست که دارم از کامپوننت شما در پروژه هام استفاده میکنم . بسیار هم راضیم . و اما بعد ....
    در پروژه پیش رو احتیاج به این دارم که تاریخ ابتدایی تقویم (تاریخی که بعد از کلیک بصورت پیش فرض انتخاب شده) رو در هر صفحه مجزا و متفاوت ارائه بدم . می خوام بدونم این کامپوننت ابزار تنظیماتی برای این موضوع داره؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اگر منظور شما defaultDate باشد، یعنی تاریخی که در صورت نادرست بودن یا خالی بودن فیلد، به کاربر نشان داده می‌شود، در مثال‌ها موجود است
      اگر منظور شما مقدار اولیه است که در هنگام بارگزاری صفحه در فیلد دیده می‌شود، این مقدار توسط شما قابل پر شدن می‌باشد
      با تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این قابلیت در نسخه‌ی رایگان وجود ندارد. در صورت تمایل می‌توانید جهت تهیه‌ی نسخه‌ی تجاری با ایمیل amibct در gmail مکاتبه نمایید.
      با تشکر

  • سلام
    چه جوری میتونیم بفهمیم تاریخ انتخاب شده چند شنبه است؟ آیا تابعی برای اون در ابزار شما وجود دارد؟
    ممنون میشم راهنمایی کنید.
    متشکر.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اگر تاریخ انتخاب شده را به صورت JD دریافت کنید که یک عدد است، با جمع و تقسیم می‌توانید آن را به روز هفته تبدیل کنید

  • یه مشکلی هست....اگه بخوایم از یک تقویم دوبار استفاده کنیم دومی کار نمیکند

    خودتون رو نسخه اصلی امتحان کنید و مثلا تقویم 1و3 رو بذارید دومی کار نمیکنه

    من دوتا تاریخ میخوام که نمیشه...لطفا بررسی کنید

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      در مثال‌های بالا که به صورت آنلاین هم موجود است، تقویم به درستی کار می‌کند
      بررسی کنید که چه اشکالی در کدهای شما وجود دارد

  • رضا سلیمیان می‌گوید:

    خیلی خوب توضیح دادید
    خیلی خوب طراحی کردید
    زحمت کشیدید
    من در طراحی سایت از برنامه شما استفاده کردم
    عالی بود
    تشکر

  • سلام
    برای تغییر دادن خود تقویم باید چه کار کرد چون کد های html رو نمیشه پیدا کرد مثلا من می خوام بجای علامت > یا >> از فونت یا ایکون استفاده کنم
    اگر امکان داره راهنمایی کنید برای تغییر این موارد باید چه کار کنم ؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      تقویم با استفاده از دستورات جاوااسکریپت ایجاد می‌شود و کدهای html به شکل معمول در آن استفاده نشده است
      اگر اطلاعات کافی برای ویرایش کدهای جاوااسکریپت را دارید، جهت دریافت نسخه‌ی فشرده نشده تقویم به ایمیل بنده به نشانی amibct در gmail پیام بدهید

  • سلام وقت بخیر و خسته نباشید
    این توقیم واقعا عالی هستش و ما داریم ازش استفاده میکنیم
    فقط یه سوال داشتم اونم اینکه چجوری میشه ورودی تاریخ رو که کاربر بصورت دستی وارد کرده validate کرد
    همچنین من دو تا باکس دارم برای تهیه گزارش که کاربر میاد از بازه تا بازه ای رو انتخاب میکنه و گزارش رو براساس اون فیلتر میکنه من میخوام مقدار تاریخ تکس باکس اول از تکست باکس دوم بیشتر نباشه چجوری میشه این عمل رو انجام داد؟باتشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      تاریخ وارد شده توسط کاربر به صورت خودکار ارزیابی می‌شود و اگر صحیح باشد، تاریخ در فیلد extra پر می‌شود
      برای استفاده بین دو فیلد، این نسخه قابلیت فوق را ندارد و در نسخه حرفه‌ای که به صورت تجاری قابل ارائه می‌باشد این قابلیت وجود دارد
      در صورت تمایل با ایمیل بنده amibct در gmail در تماس باشید
      با تشکر

  • با سلام
    وقت بخیر و خسته نباشید
    بسیار ممنون از وبلاگ مفیدتون
    سوالی که من داشتم اینه که چجوری میشه که یه تقویم طراحی کرد که همزمان شامل تقویم شمسی و میلادی باشه?
    یعنی هر دو تاریخ همزمان تو جدول باشه
    ی تقویم مثل سایت time.ir
    ممنون میشم اگه راهنمای کنین

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      انجام این کار به اطلاعات کافی در مورد تقویم‌های مختلف و داشتن مهارت کافی برنامه‌نویسی و صرف زمان برای انجام کار وابسته است

      • رامین می‌گوید:

        ممنون از پاسخگویی ...
        آیا دونستن Javascript و Jquery در کنار HTML و CSS کافیه یا نیاز به زبان دیگه ای هم هست?

        چون من در حال ساخت سایتی هستم که نیاز دارم ۲-۳ تا تقویم رو همزمان نشون بدم
        دقیقا مثل سایت time.ir

        ممنون که وقت میزارین و جواب میدین ...

  • سلام.
    نمیدونم چرا با بوت استرپ کنار نمیاد
    من روی فیلد تنظیم کردم ولی دوبار باید کلیک کنین رو فیلد تا پنجره تقویم رو بیاره
    مشکل از چیه؟
    ممنون از پاسختون

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      با توجه به اینکه ظاهرا تقویم با دوبارکلیک باز می‌شود، ممکن است مشکل شما عدم نمایش دکمه اضافه‌ای باشد که کنار فیلد قرار می‌گیرد و به دلیل تنظیمات css بوت استرپ نمایش داده نمی‌شود
      باید بررسی دقیق‌تری انجام دهید و مشکل را برطرف نمایید.

  • با سلام و تشکر بابت وبلاگ مفیدتون.
    سوالی داشتم اینکه چطور میتونم در این تقویم روز های قبل از تاریخ امروز را disabled کنم که قابل انتخاب کردن نباشند؟
    سپاسگزارم

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این تقویم امکان فوق را ندارد. در صورتی که تمایل دارید برای دریافت کد فشرده نشده تقویم و انجام اصلاحات لازم با ایمیل بنده amibct در gmail تماس بگیرید
      نگارش حرفه‌ای تقویم هم که به صورت تجاری قابل استفاده است، این قابلیت را دارد

  • سلام لطفا جواب بدین... چطور میتونم رخداد change رو برای این تقویم تشخیص بدم ... لطفا کد آن را قرار دهید... با توجه به اینکه element input تا زمانی که کاربر به صورت دستی تغییر در آن ایجاد نکند رخداد change فراخوانی نمیشود. یعنی اگر کاربر تاریخی رو انتخاب کند و مقدار input مورد نظر به تاریخ مورد نظر تغییر کرد ما نمیتوانیم در رخدادchange این را تشخیص دهیم . لذا آیا این تقویم تابعی داره که ما با استفاده از اون تشخیص بدیم تاریخ تغییر کرده است یا خیر ؟؟؟؟؟؟

  • سلام
    من از این تقویم استفاده میکنم چطور میتونم روز های آتی رو غیر فعال کنم؟(کاربر نتونه تاریخی که فرانرسیده رو انتخاب کنه)

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این قابلیت در تقویم وجود ندارد. برای انجام این کار سه گزینه در اختیار شماست
      ۱- یا هنگامی که تاریخ انتخاب شد، با کدهای خودتان بررسی کنید که تاریخ صحیحی است یا نه و پیام هشدار بدهید
      ۲- کدهای فشرده نشده تقویم را برایتان بفرستم تا خودتان این قابلیت را به آن اضافه کنید.
      ۳- نسخه‌ی حرفه‌ای تقویم که این قابلیت را دارد و به صورت تجاری قابل استفاده است، تهیه نمایید.
      جهت کسب اطلاعات در مورد گزینه‌های دوم و سوم با ایمیل بنده amibct در gmail تماس بگیرید

  • سلام و وقت بخیر و تشکر فراوان
    سوالی داشتم
    من میخوام وقتی کاربر تاریخ اشتباه وارد کرد مثلا 14/ به جای دادن خطا و .... فقط مقدار داخل فیلد خالی بشه و قبولش نکنه این رو باید چیکار کنم
    ببخشید سوالم ابتدایی هست

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این قابلیت در تقویم وجود ندارد. در عوض می‌توانید با استفاده از فیلد اضافی متوجه شوید که آیا تاریخ وارد شده صحیح است یا نه

  • سلام
    ممنون از کمکتون
    من می خوام تصویر تقویم را داخل و انتهای تکست باکس نمایش بدم نه بیرون آن
    چکار باید بکنم؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این کار با استفاده از css قابل انجام است. اگر اطلاعات کافی در این زمینه ندارید از کسی دیگر بخواهید تا اصلاحات لازم را برایتان انجام بدهد

  • سلام.باز شدن تقویم در صفحه در صورتی که صفحه اسکرول داشته باشه خطا داشت. درستش کردم.متد زیر رو میتونید جایگزین متد قبلی کنید


    var getOffset = function (b) {
    var rect = b.getBoundingClientRect(),
    scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
    scrollTop = window.pageYOffset || document.documentElement.scrollTop;
    return { top: Number((rect.top + scrollTop).toFixed()), left: Number( (rect.left + scrollLeft).toFixed()) };
    };

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      بهتر است تاریخ امروز را از سرور دریافت کنید یا اگر می‌خواهید روی کلاینت باشد، داخل کامنت‌ها کد مربوط به تاریخ روز موجود است که کمی باید آن را تغییر دهید

  • با سلام م تشکر از شما
    اول اینکه اجازه داریم تو سایت خودمون از این استفاده کنیم دوم اینکه مکان این هست روز های گذشته انتخاب نشه ؟؟میشه راهنمایی کنید

  • مهدی احمدزاده می‌گوید:

    تقویم جاوا اسکریتی که ارایه فرمودین این قابلیت رو داره که براش کال بک فانکشن تعریف کنم من قصد دارم تقویم شما رو تو یک پروژه به عنوان مثال یک سایت بیمارستانی استفاده کنم برای رزرو ویزیت پزشک به صورتی که اگه رزرو در یک روز مثلا از 10 نفر گذشت اون روز تو تقویم غیر فعال بشه و به نوعی خاموش بشه اون روز
    ممنونم میشم اگه راهنمایی بفرمایید و یا یک راهی جلو پام بزارین
    با تشکر فراوان از شما

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این قابلیت در نسخه‌ی فعلی موجود نیست. در نسخه‌ی تجاری و حرفه‌ای که قابل خریداری است، این قابلیت موجود است
      یا در صورت تمایل می‌توانم کدهای فشرده نشده نسخه فعلی را برایتان بفرستم تا تغییرات لازم را در آن انجام دهید

  • با سلام و خدا قوت. چجوری میتونم وقتی یک تاریخی رو از کاربر گرفتم متوجه بشم چه روزی از هفته است؟( منظورم چند شنبه است)
    مثلا وقتی تاریخ 1/1/1398 که میخام توی دیتابیس ذخیره کنم لازمه که بدونم چند شنبه است.آیا امکانش هست؟
    با تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      بسته به زبان برنامه‌نویسی که استفاده می‌کنیم ممکن است دستوراتی برای این کار موجود باشد یا اگر تاریخ را به صورت JD دریافت کنید، با محاسبه باقیمانده بر ۷ یک عدد به دست می‌آید که نسبت مستقیم با روز هفته دارد

  • ... زمانیکه در دات نت ارجاعات css , js رو در خود همون صفحه ای که فیلد تاریخ داره رو وارد می کنم مشکلی نداره و آیکون میاد اما زمانیکه تو pagelayout ارجاعات رو وارد می کنم آیکون نمایش داده نمی شود.
    در ضمن جهت تغییر رنگ پوسته تقویم چکار باید انجام بدم..بازم ممنونم

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      مشکل شما مربوط به دات نت است و در این زمینه بنده اطلاعاتی ندارم
      در مورد تغییر رنگ پوسته، می‌بایست فایل css تقویم را ویرایش کنید

  • با سلام و وقت بخیر
    چطوری میتونم بعد از انتخاب تاریخ علاوه بر این که تاریخ رو در فیاد خودش نمایش ویده ی فیلد دیگه داشته باشم که ماه جاری رو هم همزمان نمایش بده ، یعنی 2 فش فیلد که یکی تاریخ انتخاب شده رو نشون میده و دیگری ماه همون تاریخ رو نشون بده(مثلا فروردین یا آبان) ممنون

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      فیلد اضافی یک مورد است. تاریخ را با فرمت دلخواه می‌توانید در این فیلد ذخیره کنید و اگر کار دیگری با تاریخ باشد، خودتان آن را باید کد نویسی کنید

  • لام وقت بخیر من چطور میتونم استایل تقویم رو تغییر بدم؟میشه راهنماییم کنی؟
    از طرفی نمیخوام با کلیک تقویم نمایش داده بشه میخوام بدون کلیک بعد از لود سایت رو صفحه اجرا شه چیکار باید کنم؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      استایل تقویم داخل فایل css است و برای انجام تغییرات باید با CSS آشنایی داشته باشید
      برای تغییر عملکرد شکل نمایش، قابلیتی به شکل مورد نظر شما در تقویم وجود ندارد و لازم است تا با جاوااسکریپت آشنا باشید و بتوانید کدهای تقویم را تغییر بدهید

      • بله مشکلم حل شد اما الان ی مشکل دیگ دارم

        من میخوام تعطیلات رو نشون بدم فقط بدون ذکر دلیل(رویدادی نمیخوام ثبت شه)
        فقط میخوام نشون بده ک مثلا 20 شهریور تعطیل هست
        میشه اینم راهنمایی کنید؟
        ممنون میشم

        • امیرمسعود ایرانی می‌گوید:

          با استفاده از این نسخه از تقویم هر کاری را نمی‌توانید انجام بدهید و امکانات آن شامل مواردی است که در توضیحات نوشته شده است

  • با سلام
    و تشکر بابت تقویمی که نوشته اید
    یک سوال داشتم، من تقویم رو در boostrap modal استفاده کردم
    بعد از باز شدن modal، جای آن را درست نمایش نمی دهد، چه کاری باید انجام بدهم؟
    پیشاپیش متشکرم

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      شکل مکان‌یابی در این نسخه از تقویم به شکلی است که با بوت‌استرپ تداخل دارد. در نسخه‌ی جدید روش مکان‌یابی تغییر کرده است. این نسخه به صورت رایگان قابل دانلود نیست. برای تهیه‌ی نسخه‌ی جدید با ایمیل amibct در gmail تماس بگیرید.

  • با سلام و عرض تشکر از زحمات و پاسخگوییتان و هم چنین احترام و ارزشی که برای مخاطبانتان قائلید.

    میشه لطفا راهنماییم کنید که چطور می تونم تاریخ رو به فرمت yyyy-mm-dd مثلا 10-17-2020 در دیتابیس ذخیره کنم؟

    قبلا از راهنماییتون سپاسگزارم

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای ذخیره‌سازی تاریخ به فرمت دلخواه می‌بایست از فیلد اضافی استفاده کنید که توضیحات آن در بالا نوشته شده است

  • سلام و تشکر بسیار زیاد از شما لطفا لطفا من یک مشکل دارم اگه میشه منو راهنمایی کنید
    من میخوام تمام این کد هارو به یک وب کامپوننت (web component) انتقال بدم ساختار کامپوننت کاملا اوکی هست فقط نمیتونم متوجه یکی از قسمت های که در js خود کردید بشم.
    قسمت هایی که document دارند مثلا
    document.onclick که نمیفهمم چی رو دقیقا مورد هدف قرار میده تا بتونم اونو با shadow dom خودم هماهنگ کنم .
    اگه کسی اطلاع داره لطفا همکاری کنه من هم کامپوننت همین date picker رو اماده بدون هیچ دسترسی بیرونی و فقط با js و html خالص رو بهش میدم که زندگیشو براش راهت کنه .
    ممنون.

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اضافه کردن رویداد click به document برای تشخیص زمانی است که کاربر روی فضای خارجی datepicker کلیک کند و بتوانیم تشخیص بدهیم و پنجره‌را ببندیم
      ممکن است بخواهید این بخش را به همین صورت باقی بگذارید یا اگر در یک ناحیه‌ی ویژه قرار دارد، رویداد را به آن ناحیه اضافه کنید
      برای گفتگوی بیشتر لطفا از ایمیل amibct در gmail استفاده کنید

  • سلام. من هر کار کردم تقویم نشان داده نشد. فقط کادر input ظاهر شد.
    لطفا ساده تر بیان کنید.
    مثلا منظور از انتهای اکریپت کد زیر را اضاف کنید منظور کدام اسکریپت است؟
    با ااین حال همه مراحل را رفتم ولی درست نشد(asp.net core razor page )
    NET. 5
    لطفا راهنمایی کنید

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      به نظر می‌رسد مشکلی در هماهنگ کردن کدها با دات نت داشته باشید که در این خصوص بنده تجربه‌ای ندارم
      نمونه‌ی قابل استفاده در html همراه بسته موجود است و کارهای هماهنگی با محیط توسعه را خودتان می‌بایست انجام بدهید

  • مرتضی آشوری می‌گوید:

    با سلام مجدد
    من نگاه کردم کد جاوا رو. خطا بجاست. شما از متغیر d بدون اینکه تعریفی ازش کرده باشید والد رو در خط 16 درخواست کردید و چون مترجم جاوا اطلاعی ازش نداره خطا میده
    d.parentNode

    • امیرمسعود ایرانی می‌گوید:

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

  • با سلام ووقت بخیر من قصد اینو نداشتم که تقویم میلادی به شمسی تبدیل کنم دنبال کدی بودم که مثلا بزنه امروز چهارشنبه 06/05/1400 فقط همینو میخواستم ولی فقط تقویم شمسی هستش

  • سلام خسته نباشی
    همه جارو گشتم که یه بدرد بخور بتونم استفاده کنم و پیدا کنم که وبلاگ تورو پیدا کردم
    خیلی خوبه که مردم بدون هیچ درخواست پولی اقدام به ساخت چنین چیز هایی میکنند .
    من تا الان دو تا وب سایت دیدم که به رایگان حالا کتابخانه یا چیزی رو در اختیار کاربر میزاره و پولی هم نیست
    یکیش کتابخانه تاریخ شمسی jdf بود
    یکیش وبلاگ شما
    پروژه ام متن بسته هست اما حتما آدرس وبلاگ و کامپونتت و همه چیتون رو مینویسم .
    واقعا باید ازتون تشکر کرد
    من خودم هم توسعه دهنده یه مجموعه کتابخونه توی زبان php هستم که توی آدرس وبلاگ آدرس مستندات رو ذکر کردم
    سایت شخصیم هم oflink.ir/web هست.
    و این کامپوننت رو هم برا یه پروژه ای میخواستم که کاملا به کارم اومد
    فوق العاده ممنون

  • سلام وقتتون بخیر ،

    یک سوال داشتم از خدمتتون چطوری میتونم اندازه تقویم رو بزرگتر کنم الان به صورت پیش فرض خیلی کوچیکه ، ممنون میشم راهنمایی کنید .

    وین مشکل دیگه هم که هست ، کاربر وقتی بر روی خود تقویم کلیک می کنه تقویم محو میشه

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      تغییرات در ظاهر تقویم با تغییر در CSS امکان پذیر است
      کلیک روی روزهای تقویم به صورت خودکار روز را انتخاب می‌کند و بسته می‌شود. اگر منظور شما کلیک روی فضاهای خالی است، احتمالا تداخلی با کتابخانه‌ی دیگر وجود دارد

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *