<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Nasser Hekmati</title><link>https://virgool.ir/feed/@hekmati.nasser</link><description></description><language>fa</language><pubDate>2026-11-11 11:36:01</pubDate><image><url>https://files.virgool.ir/upload/users/827722/avatar/avatar.png</url><title>Nasser Hekmati</title><link>https://virgool.ir/@hekmati.nasser</link></image><item><title>چرا پلاگین تاریخ شمسی ورتا به ورژن 8 رسید؟</title><link>https://virgool.ir/@hekmati.nasser/چرا-پلاگین-تاریخ-شمسی-ورتا-به-ورژن-8-رسید-ph2qkhef6kjb</link><description>ورتا پلاگین تاریخ شمسیسلامدر پلاگین تاریخ شمسی ورتا چه کارهای جدیدی کردی که یک ورژن اصلی دادی و از ورژن 2 یکباره به 8 رسید؟ خلاصه بگم تمام مجموع توابعی که باید با افزوده شدن اون ها ورژن اصلی رخ میداد در نظر گرفته شد  5 قابلیت جدید هم اضافه شد. با توجه به اینکه مدت کوتاهی به پایان ساپورت php 7.4 نمونده بود از 2 ماه گذشته برنامه ریزی کردیم تا ورژن جدید سازگار با 8 ارائه بدم تو این نسخه پلاگین شمسی ورتا کار دیگه ای که کردم این بود برای بقیه فریم ورک php از لاراول جدا شد این قابلیت میده شما در سیموفونی و ... حتی در cms ها از نسخه مخصوص php استفاده کنید که اسمشو جلالی گذاشتم و ورتا از پکیج جلالی استفاده میکنه و اومده اعتبار سنجی های مخصوص لاراول نوشته شده.بهبود الگوریتم ها کار دیگه ای بود که باید برای سرعت کار انجام میشد تا به مراتب هم کد کمتر و هم سریعتری با محاسبات کمتری ارائه میشد. بعضی از قسمت های محاسبات نمیشد با پکیج carbon یا datatime php نوشت و این محسابات سعی کردم ساده کنم که نتیجه اش خیلی خوب شد علاوه بر اون از بعضی امکانات نسخه 8 php استفاده کردم که کار ساده تر میکردافزوده شدن exception ها کار دیگه ای بود که تو این ورژن اومد و exceptionها مخصوص هر عملیات اضافه شد این قابلیت میده تا بتونید در هنگام کار با تاریخ دقیقا متوجه بشید خطای اتفاق افتاده بخاطر چیه و چه پارامتری اشتباه ارسال شده.یک تریت مخصوص بررسی مقادیر زمانی اضافه شده و قراره بیشتر بشه  و کلی امکانات سنجش اعتبار تاریخ بهمون بده و بتونیم همشون در ریکوئست بررسی شد.داکیومنت جدید  فقط زبان انگلیسی هست  وسعی شده فرست قابل جستجو داشته باشه که سریعتر بتونید به خواسته هاتون برسید. همچنین یک قالب مشخص برای هر متد تریف شده که ورودی ها و خروجی ها و توضیحات و ... داخلش هست.برنامه های جالبی داریم ان شا الله بتونم همشو بزنم.</description><category>Nasser Hekmati</category><author>Nasser Hekmati</author><pubDate>Fri, 29 Jul 2022 22:02:58 +0430</pubDate></item><item><title>تبدیل تاریخ میلادی به تاریخ شمسی و بالعکس در لاراول</title><link>https://virgool.ir/@hekmati.nasser/تبدیل-تاریخ-میلادی-به-تاریخ-شمسی-و-بالعکس-در-لاراول-hs6trxa3odys</link><description>حتما برای شما هم پیش آمده در پروژه خود نیاز به تبدیل تاریخ شمسی به میلادی با برعکس را دارید و یا گاهی اطلاعات تاریخ شمسی را از جایی میخوانید و میخواهید با این تاریخ  محاسبات درون کد خود انجام دهید.درون فرم های خود تاریخ شمسی را ورودی میگیرید و باید اعتبارسنجی کنید همه این امکانات و ویژگی بیشتر در لاراول با پکیج ورتا خواهید داشت.با هم مروری بر امکانات بی شمار این پکیج که بسیاری از برنامه نویسان با بهبود این پکیج لارول به یکی از کاملترین پکیج موجود کرده اند می اندازیم.برای مشاهده این پکیج میتوانید به گیت هاب این پکیج مراجعه کنید.ورتانحوه استفادهبرای نصب دستور زیر را وارد کنید$ composer require hekmatinasser/vertaبرای بدست آوردن تاریخ و زمان کنونی شمسی، از دستور زیر استفاده کنید$v = new Verta(); //1396-02-02 15:32:08&#xA;$v = verta(); //1396-02-02 15:32:08برای بدست آوردن تاریخ و زمان به نسبت اکنون، از دستور زیر استفاده کنید$v = Verta::now(); //1396-02-02 15:32:08&#xA;$v = Verta::today(); //1396-03-02 00:00:00&#xA;$v = Verta::tomorrow(); // 1396-03-03 00:00:00&#xA;$v = Verta::yesterday(); // 1396-03-01 00:00:00برای بدست آوردن تاریخ و زمان به نسبت اکنون مانند تاریخ زمان پی اچ پی به صورت رشته ، از دستور زیر استفاده کنید$v = new Verta(&#39;now&#39;); // 1399-06-18 15:32:08&#xA;$v = new Verta(&#39;-1 day&#39;); //1399-06-17 15:07:04&#xA;$v = new Verta(&#39;+1 month&#39;); //1399-07-17 16:51:09&#xA;$v = new Verta(&#39;next friday&#39;); //1399-06-21 00:00:00&#xA;$v = new Verta(&#39;last sunday&#39;); //1399-06-16 00:00:00برای تبدیل تاریخ میلادی خود به شمسی، از دستور زیر استفاده کنید$v = new Verta(&#39;2016-12-27 14:12:32&#39;);&#xA;$v = Verta::instance(&#39;2016-12-25 11:12:36&#39;);&#xA;$v = Facades\Verta::instance(&#39;2016-12-25 11:12:36&#39;);برای استفاده از عدد تایم استمپ به شمسی، از دستور زیر استفاده کنید$v = new Verta(1333857600);برای استفاده از کلاس تاریخ و زمان پی اچ پی به شمسی، از دستور زیر استفاده کنید$dt = new \Datetime();&#xA;return new Verta($dt); // 1395-12-09 15:05:56برای استفاده از کلاس کربن به شمسی، از دستور زیر استفاده کنید$c = \Carbon::now();&#xA;return verta($c); // 1395-12-09 15:05:56برای استفاده از تاریخ شمسی به صورت رشته، از دستور زیر استفاده کنید$v = Verta::parse(&#39;1395-10-07 14:12:32&#39;);&#xA;$v = Verta::parse(&#39;1396 مهر 17&#39;);&#xA;$v =  Verta::parseFormat(&#39;Y n j&#39;,&#39;1396 مهر 17&#39;);خصوصیاتبرای دریافت مقادیر خصوصیات، از دستورات زیر استفاده کنید$v = verta(); // 1396-03-14 14:18:23&#xA;return $v-&gt;year; // 1396&#xA;return $v-&gt;quarter // 1&#xA;return $v-&gt;month; // 3&#xA;return $v-&gt;day; // 14&#xA;return $v-&gt;hour; // 14&#xA;return $v-&gt;minute; // 18&#xA;return $v-&gt;second; // 23&#xA;return $v-&gt;micro; // 0&#xA;return $v-&gt;dayOfWeek; // 1&#xA;return $v-&gt;dayOfYear; // 107&#xA;return $v-&gt;weekOfYear; // 16&#xA;return $v-&gt;daysInMonth; // 31&#xA;return $v-&gt;timestamp; // 1496557661&#xA;return $v-&gt;timezone; // Asia/Tehranبرای مقدار دهی خصوصیات، از دستورات زیر استفاده کنید$v = verta();&#xA;$v-&gt;year = 1395;&#xA;$v-&gt;month = 4; // عدد 13 برای ثبت سال آینده اولین ماه&#xA;$v-&gt;day = 25;&#xA;$v-&gt;hour = 16;&#xA;$v-&gt;minute = 50;&#xA;$v-&gt;second = 42;&#xA;$v-&gt;timestamp = 1496557661;&#xA;$v-&gt;timezone = &#39;Asia/Baku&#39;;قالب نمایشبرای نمایش تاریخ به شمسی، از دستور زیر استفاده کنید$v = verta();&#xA;return $v-&gt;format(&#39;Y-n-j H:i&#39;); // 1395-10-7 14:12&#xA;return $v-&gt;format(&#39;%B %d، %Y&#39;); // دی 07، 1395&#xA;return $v; //1395-10-07 14:12:32برای نمایش اختلاف تاریخ به صورت واحد زمانی، از دستور زیر استفاده کنیددرصورتی که تاریخ را وارد نکنید، اختلاف با زمان کنونی محاسبه می شود.return $v1-&gt;formatDifference($v2); // 12 ماه بعد&#xA;return $v1-&gt;formatDifference($v3); // 1 سال قبل&#xA;return $v1-&gt;addDays(25)-&gt;formatDifference(); // 4 هفته بعد&#xA;return $v1-&gt;subDays(6)-&gt;formatDifference(); // 6 روز قبل&#xA;return verta()-&gt;formatDifference(); // الانبرای نمایش اعداد به صورت حروف، از دستور زیر استفاده کنیدreturn $v-&gt;formatWord(&#39;Y&#39;); // یک هزار و سیصد و نود و شش&#xA;return $v-&gt;formatWord(&#39;l dS F&#39;); // چهارشنبه بیست و نه ام شهریور&#xA;return $v-&gt;formatWord(&#39;d F Y&#39;); // بیست و نه شهریور یک هزار و سیصد و نود و شش&#xA;return $v-&gt;formatWord(&#39;r&#39;); // چهارشنبه یک هزار و سیصد و نود و شش, شش, بیست و نه, بیست و دو:چهل و نه:سی و هشت +04:30&#xA;return $v-&gt;formatWord(&#39;d F &#39;) . $v-&gt;year; // بیست و نه شهریور 1396تغییر دادنبرای اضافه یا کم کردن از تاریخ خود، از دستور زیر استفاده کنید$v = verta();&#xA;return $v-&gt;addYear(); // 1396-10-07 14:12:32&#xA;return $v-&gt;addYears(4); // 1399-10-07 14:12:32&#xA;return $v-&gt;subYear(); // 1394-10-07 14:12:32&#xA;return $v-&gt;subYears(2); // 1393-10-07 14:12:32return $v-&gt;addMonth(); // 1395-11-07 14:12:32&#xA;return $v-&gt;addMonths(5); // 1396-03-07 14:12:32&#xA;return $v-&gt;subMonth(); // 1395-09-07 14:12:32&#xA;return $v-&gt;subMonths(2); // 1395-08-07 14:12:32return $v-&gt;addWeek(); // 1395-10-12 14:12:32&#xA;return $v-&gt;addWeeks(3); // 1395-10-26 14:12:32&#xA;return $v-&gt;subWeek(); // 1395-09-30 14:12:32&#xA;return $v-&gt;subWeeks(2); // 1395-09-27 14:12:32return $v-&gt;addDay(); // 1395-10-08 14:12:32&#xA;return $v-&gt;addDays(3); // 1395-10-11 14:12:32&#xA;return $v-&gt;subDay(); // 1395-10-06 14:12:32&#xA;return $v-&gt;subDays(2); // 1395-09-05 14:12:32return $v-&gt;addHour(); // 1395-10-07 15:12:32&#xA;return $v-&gt;addHours(5); // 1395-10-07 19:12:32&#xA;return $v-&gt;subHour(); // 1395-10-07 13:12:32&#xA;return $v-&gt;subHours(2); // 1395-10-07 12:12:32return $v-&gt;addMinute(); // 1395-10-07 14:13:32&#xA;return $v-&gt;addMinutes(3); // 1395-10-07 14:15:32&#xA;return $v-&gt;subMinute(); // 1395-10-07 14:11:32&#xA;return $v-&gt;subMinutes(2); // 1395-10-07 14:10:32return $v-&gt;addSecond(); // 1395-10-07 14:12:33&#xA;return $v-&gt;addSeconds(3); // 1395-10-07 14:12:35&#xA;return $v-&gt;subSecond(); // 1395-10-07 14:12:31&#xA;return $v-&gt;subSeconds(2); // 1395-10-07 14:12:30بررسی و مقایسهبرای اعتبار سنجی تاریخ، از دستور زیر استفاده کنیدreturn Verta::isLeapYear(1394); // false&#xA;return Verta::isValidDate(1394, 12, 30); // false&#xA;return Verta::isValidTime(15, 12, 30); // trueبرای محاسبه اختلاف تاریخ ها با یکدیگر، از دستور زیر استفاده کنید// diff objects together&#xA;$v1 = verta(); // 1396-03-31 22:21:40&#xA;$v2 = verta(&#39;2017-06-21 01:21:40&#39;); // 1396-03-31 01:21:40&#xA;$v3 = verta(&#39;2017-06-20&#39;); // 1396-03-30 15:24:53&#xA;&#xA;return $v1-&gt;diffYears($v3); // -1&#xA;return $v1-&gt;diffMonths($v2); // 11&#xA;return $v2-&gt;diffMonths(); // -11 مقایسه با زمان کنونی&#xA;return $v1-&gt;diffWeeks($v2); // 51&#xA;return $v1-&gt;diffDays($v3); // -372&#xA;return $v3-&gt;diffMinutes(); // 536548&#xA;return $v3-&gt;diffSeconds(); // 12261931برای مقایسه تاریخ ها با یکدیگر، از دستور زیر استفاده کنیدreturn $v1-&gt;eq(); // ture alias equalTo()&#xA;return $v1-&gt;ne($v2); // true alias notEqualTo()&#xA;return $v1-&gt;gt($v2); // true alias greaterThan()&#xA;return $v1-&gt;gte($v2); // true alias greaterThanOrEqualTo()&#xA;return $v1-&gt;lt($v2); // false alias lessThan()&#xA;return $v1-&gt;lte($v2); // false alias lessThanOrEqualTo()&#xA;return $v1-&gt;between($v2, $v3); // falseاعتبار سنجیشما می توانید با اعتبار سنجی لاراول تاریخ های شمسی درون فرم های خود استفاده کنیدشما باید پیام های خطا برای اعتبار سنجی خود در در  مسیر فایل های ترجمه خود اضافه کنیدبرای نمونه کد هایی که درون پکیج برای  پیام خطا وجود دارد در فایل ترجمه خود قرار دهیدبرای مثال در فایل ترجمه  پیام خطا به آرایه عبارات زیر را اضافه کنید&#39;jdate&#39; =&gt; &#39;:attribute تاریخ شمسی معتبر نمی باشد.&#39;,&#xA;&#39;jdate_equal&#39; =&gt; &#39;:attribute تاریخ شمسی برابر :fa-date نمی باشد.&#39;,&#xA;&#39;jdate_not_equal&#39; =&gt; &#39;:attribute تاریخ شمسی نامساوی :fa-date نمی باشد.&#39;,&#xA;&#39;jdatetime&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی معتبر نمی باشد.&#39;,&#xA;&#39;jdatetime_equal&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی مساوی :fa-date نمی باشد.&#39;,&#xA;&#39;jdatetime_not_equal&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی نامساوی :fa-date نمی باشد.&#39;,&#xA;&#39;jdate_after&#39; =&gt; &#39;:attribute تاریخ شمسی باید بعد از :fa-date باشد.&#39;,&#xA;&#39;jdate_after_equal&#39; =&gt; &#39;:attribute تاریخ شمسی باید بعد یا برابر از :fa-date باشد.&#39;,&#xA;&#39;jdatetime_after&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی باید بعد از :fa-date باشد.&#39;,&#xA;&#39;jdatetime_after_equal&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی باید بعد یا برابر از :fa-date باشد.&#39;,&#xA;&#39;jdate_before&#39; =&gt; &#39;:attribute تاریخ شمسی باید قبل از :fa-date باشد.&#39;,&#xA;&#39;jdate_before_equal&#39; =&gt; &#39;:attribute تاریخ شمسی باید قبل یا برابر از :fa-date باشد.&#39;,&#xA;&#39;jdatetime_before&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی باید قبل از :fa-date باشد.&#39;,&#xA;&#39;jdatetime_before_equal&#39; =&gt; &#39;:attribute تاریخ و زمان شمسی باید قبل یا برابر از :fa-date باشد.&#39;,&#xA;&#xA;&#39;attributes&#39; =&gt; [&#xA;    &#39;start_date&#39; =&gt; &#39;تاریخ شروع&#39;,&#xA;    &#39;expire_datetime&#39; =&gt; &#39;تاریخ انقضا&#39;,&#xA;],میتوانید با ترکیب اعتبارسنجی تاریخ را بین دو محدوده بررسی کنید$validate = Validator::make([&#xA;    &#39;start_date&#39; =&gt; &#39;1389/01/31&#39;,&#xA;    &#39;expire_datetime&#39; =&gt; &#39;1397/02/16 12:10:00&#39;,&#xA;],&#xA;[&#xA;    &#39;start_date&#39; =&gt; &#39;required|jdate:Y/m/d|jdate_after:1388/01/01,Y/m/d|jdate_before:1390/01/01&#39;,&#xA;    &#39;expire_datetime&#39; =&gt; &#39;required|jdatetime|jdatetime_after:1397/02/16 12:09:50,Y/m/d H:i:s|jdatetime_before:1397/02/16 12:11:00&#39;,&#xA;]);&#xA;&#xA;if ($validate-&gt;fails()) {&#xA;    dd($validate-&gt;messages()-&gt;toArray());&#xA;}&#xA;&#xA;    //output&#xA;array:2 [&#xA;  &#34;start_date&#34; =&gt; array:1 [&#xA;    0 =&gt; &#34;تاریخ شروع تاریخ شمسی باید قبل از ۱۳۹۰/۰۱/۰۱ باشد.&#34;&#xA;  ]&#xA;  &#34;expire_datetime&#34; =&gt; array:1 [&#xA;    0 =&gt; &#34;تاریخ انقضا تاریخ و زمان شمسی باید قبل از ۱۳۹۷/۰۲/۱۶ ۱۲:۱۰:۰۰ باشد.&#34;&#xA;  ]&#xA;]امکانات این پکیج بیشتر از موارد گفته شده در این مقاله هست برای استفاده و دیدن امکانات بیشتر میتوانید از مستندات این پکیج استفاده کنید.</description><category>Nasser Hekmati</category><author>Nasser Hekmati</author><pubDate>Wed, 21 Apr 2021 22:31:10 +0430</pubDate></item></channel></rss>