mysql — конвертируйте календарь Джалали в грузинский с помощью PHP в CodeIgniter

Мне нужно хранить дату на персидском (Jalali) дату в MySQL. Я использую CodeIgniter.
Мне нужно что-то вроде этого:

$Date = Jalali_to_Georgian(1393,5,28) // Output: "2014/08/19"

Нужно ли создавать новую библиотеку для этого?

4

Решение

Как правило, лучше придерживаться существующих библиотек, чем писать свои собственные.
Попробуйте, например, jDateTime или же Григорианский-Jalali-Date-Convertor.

Постскриптум Я никогда не пытался использовать их сам, но первый выглядит гораздо более солидно.

3

Другие решения

Сначала создайте библиотеку в приложении / библиотеках с именем Calendar.php

Class Calendar
{function jalali_to_gregorian($j_y, $j_m, $j_d)
{
$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);$jy = $j_y-979;
$jm = $j_m-1;
$jd = $j_d-1;

$j_day_no = 365*$jy + $this->div($jy, 33)*8 + $this->div($jy%33+3, 4);
for ($i=0; $i < $jm; ++$i)
$j_day_no += $j_days_in_month[$i];

$j_day_no += $jd;

$g_day_no = $j_day_no+79;

$gy = 1600 + 400*$this->div($g_day_no, 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
$g_day_no = $g_day_no % 146097;

$leap = true;
if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
{
$g_day_no--;
$gy += 100*$this->div($g_day_no,  36524); /* 36524 = 365*100 + 100/4 - 100/100 */
$g_day_no = $g_day_no % 36524;

if ($g_day_no >= 365)
$g_day_no++;
else
$leap = false;
}

$gy += 4*$this->div($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */
$g_day_no %= 1461;

if ($g_day_no >= 366) {
$leap = false;

$g_day_no--;
$gy += $this->div($g_day_no, 365);
$g_day_no = $g_day_no % 365;
}

for ($i = 0; $g_day_no >= $g_days_in_month[$i] + ($i == 1 && $leap); $i++)
$g_day_no -= $g_days_in_month[$i] + ($i == 1 && $leap);
$gm = $i+1;
$gd = $g_day_no+1;

return array($gy, $gm, $gd);
}
}

Затем используйте его, когда захотите:

Class TestController
{
function index()
{
$this->load->library('calendar');
list($year, $month, $day) = $this->calendar->jalali_to_gregorian(1395,5,12);
echo "$year/$month/$day";
}
}

С уважением

0

По вопросам рекламы [email protected]