Req #52972 [NEW]: Support Persian Calendar
| From: | takmahdi at gmail dot com | Date: | Sat, 02 Oct 2010 17:54:58 +0000 |
| Subject: | Req #52972 [NEW]: Support Persian Calendar | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-154832@lists.php.net to get a copy of this message | ||
From:
Operating system: Linux/Windows
PHP version: 5.3.3
Package: Calendar related
Bug Type: Feature/Change Request
Bug description:Support Persian Calendar
Description:
------------
Hi,
I want use Persian calendar in PHP, but not support this feature; In Iran
we use
none standard script for implement this feature and It is not likely...!
If year%33 remaining 1, 5, 9, 13, 17, 22, 26, 30 this year will calling
leap
year.
Persian calendar:
months/abbrevmonths are: Farvardin, Ordibehesht, Khordad, Tir, Mordad,
Shahrivar, Mehr, Aban, Azar, Dey, Bahman, Esfand
daysname/abbrevdaysname: Yekshanbeh = Sunday, Doshanbeh, Seshhanbeh,
Chaharshanbeh, Panjshanbeh, Jomeh, Shanbeh
week begin from Shanbeh
days range in month: 29-31
I use below script:
http://www.fourmilab.ch/documents/calendar/
Thanks for cooperation.
Regards
Test script:
---------------
const CAL_PERSIAN = 4;
const PERSIAN_EPOCH = 1948320.5;
function Persian2JD($year, $month, $day) {
$epbase = $year - (($year >= 0) ? 474 : 473);
$epyear = 474 + $epbase%2820;
return $day + (($month <= 7) ? (($month - 1) * 31) : ((($month - 1) *
30) + 6)) + (int)((($epyear * 682) - 110) / 2816) + ($epyear - 1) * 365 +
(int)($epbase / 2820) * 1029983 + (PERSIAN_EPOCH - 1);
}
function JD2Persian($jd) { # Calculate Persian date from Julian day
$jd = (int)$jd + 0.5;
$depoch = $jd - Persian2JD(475, 1, 1);
$cycle = (int)($depoch / 1029983);
$cyear = $depoch%1029983;
if ($cyear == 1029982)
$ycycle = 2820;
else {
$aux1 = (int)($cyear / 366);
$aux2 = $cyear%366;
$ycycle = (int)(((2134 * $aux1) + (2816 * $aux2) + 2815) /
1028522) + $aux1 + 1;
}
$year = $ycycle + (2820 * $cycle) + 474;
if ($year <= 0)
$year--;
$yday = ($jd - Persian2JD($year, 1, 1)) + 1;
$month = ($yday <= 186) ? ceil($yday / 31) : ceil(($yday - 6) / 30);
$day = ($jd - Persian2JD($year, $month, 1)) + 1;
return $year.'-'.str_pad($month, 2, 0, STR_PAD_LEFT).'-'.str_pad($day,
2, 0, STR_PAD_LEFT);
}
--
Edit bug report at http://bugs.php.net/bug.php?id=52972&edit=1
--
Try a snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=52972&r=trysnapshot52
Try a snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=52972&r=trysnapshot53
Try a snapshot (trunk): http://bugs.php.net/fix.php?id=52972&r=trysnapshottrunk
Fixed in SVN: http://bugs.php.net/fix.php?id=52972&r=fixed
Fixed in SVN and need be documented: http://bugs.php.net/fix.php?id=52972&r=needdocs
Fixed in release: http://bugs.php.net/fix.php?id=52972&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=52972&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=52972&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=52972&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=52972&r=support
Expected behavior: http://bugs.php.net/fix.php?id=52972&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=52972&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=52972&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=52972&r=globals
PHP 4 support discontinued: http://bugs.php.net/fix.php?id=52972&r=php4
Daylight Savings: http://bugs.php.net/fix.php?id=52972&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=52972&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=52972&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=52972&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=52972&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=52972&r=mysqlcfg