فهرست مستندات پروژه
تقویم شمسی
تبدیل تاریخ شمسی و کار با سال کبیسه و فصلها.
ساخت تاریخ
از CivilDateTime::fromJalali() و jalali() استفاده کنید. کلاس خواندن ورودی Eram\Daynum\Calendar\Jalali\JalaliView است. شناسه تقویم و گروه نامهای زبان jalali و قالب پیشفرض رشته Y/m/d است. برای نام ماههای ایران withLocale('fa') و برای نامهای دری fa-AF را انتخاب کنید. شکل ارقام جداگانه تنظیم میشود.
تعداد روزهای ماه
ماههای 1 تا 6، از فروردین تا شهریور، ۳۱ روز دارند. ماههای 7 تا 11، از مهر تا بهمن، ۳۰ روز دارند. اسفند با توجه به محاسبه سال کبیسه ۲۹ یا ۳۰ روز دارد.
<?php
require 'vendor/autoload.php';
use Eram\Daynum\CivilDateTime;
var_export(CivilDateTime::isValidJalali(1403, 12, 30));
echo "\n";
var_export(CivilDateTime::isValidJalali(1404, 12, 30));
echo "\n";
$v = CivilDateTime::fromJalali(1405, 8, 1)->jalali();
echo $v->withLocale('fa')->seasonName(), "\n";
echo $v->startOfQuarter()->jalali()->format('Y/m/d'), "\n";
true
false
پاییز
1405/07/01
فصلها
فقط JalaliView متدهای season(): Season و seasonName(): string را دارد. ماههای 1 تا 3 بهار، 4 تا 6 تابستان، 7 تا 9 پاییز و 10 تا 12 زمستان هستند. منظور فصل تقویمی است، نه لحظه نجومی آغاز فصل. startOfQuarter() اولین ماه آن گروه را انتخاب میکند و ساعت را حفظ میکند.
مقایسه با ICU
جدول نقاط تغییر و محاسبه jalCal در پیادهسازی از jalaali-js پیروی میکنند. منبع اصلی الگوریتم را به کازیمیر بورکوفسکی نسبت میدهد. متن قبلی Daynum و کامنتهای فعلی کد آن را «بیرشک» مینامند؛ برای توصیف کد نباید به این نسبت تکیه کرد. این تغییر مستندات، الگوریتم را عوض نمیکند.
بین fixtureهای ذخیرهشده ICU و Daynum تفاوتهای شناختهشده وجود دارد. JalaliIcuDivergence بازههای پایه JDN را با fixture فعلی و در صورت وجود با خروجی Node بررسی میکند. بازههای دقیق پایه عبارتاند از 2341973 تا 2342051، 2377845 تا 2378210، 2496914 تا 2497279 و 2533073 تا 2533438. تستها اختلاف غیرمنتظره را رد میکنند؛ این به معنی تطابق همیشگی با ICU، تقویم رصدی یا همه نسخههای کتابخانه اصلی نیست. الگوریتمها و منابع را ببینید.
محدوده
ساخت تاریخ سالهای 1 تا 3177 را میپذیرد؛ این مرزها در JalaliCalendar::MIN_YEAR و MAX_YEAR هستند. پیش از خواندن یک JDN دلخواه، isInSupportedRange() را بررسی کنید. محاسبه سطح پایین نقاط تغییر، در همه مسیرهای تبدیل معکوس نقش اعتبارسنجی دقیق محدوده را ندارد.
برای ورودی با نام ماه و روز، parsing را ببینید؛ F، M، l و D پشتیبانی میشوند. برای رفتار انتهای ماه، محاسبات را بخوانید.