在CodeIgniter中通过PHP将Jalali日历转换为公历
我需要在MySQL中存储波斯语(Jalali)日期。我用的是CodeIgniter。 我需要这样的东西:在CodeIgniter中通过PHP将Jalali日历转换为公历,php,mysql,codeigniter,georgian,persian-calendar,Php,Mysql,Codeigniter,Georgian,Persian Calendar,我需要在MySQL中存储波斯语(Jalali)日期。我用的是CodeIgniter。 我需要这样的东西: $Date = Jalali_to_Georgian(1393,5,28) // Output: "2014/08/19" 我需要为此创建一个新库吗?通常,坚持使用现有库比编写自己的库要好。 比如,试试看,或者 另外,我自己从来没有尝试过使用它们,但第一个看起来更可靠。首先,在名为Calendar.php的应用程序/库中创建一个库 Class Calendar { functi
$Date = Jalali_to_Georgian(1393,5,28) // Output: "2014/08/19"
我需要为此创建一个新库吗?通常,坚持使用现有库比编写自己的库要好。 比如,试试看,或者
另外,我自己从来没有尝试过使用它们,但第一个看起来更可靠。首先,在名为
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);
}
}
致意您可以使用此功能
jalali_to_gregorian($year, $month, $day, $separator);
- 带分隔符的示例:
jalali_to_gregorian(1398, 5, 7, "-"); // Output => 2019-7-29
jalali_to_gregorian(1398, 5, 7); // Output => ["2019","7","29"]
- 不带分隔符的示例:
jalali_to_gregorian(1398, 5, 7, "-"); // Output => 2019-7-29
jalali_to_gregorian(1398, 5, 7); // Output => ["2019","7","29"]
这就是功能:
function jalali_to_gregorian($jy, $jm, $jd, $mod = '')
{
if ($jy > 979) {
$gy = 1600;
$jy -= 979;
} else {
$gy = 621;
}
$days = (365 * $jy) + (((int)($jy / 33)) * 8) + ((int)((($jy % 33) + 3) / 4)) + 78 + $jd + (($jm < 7) ? ($jm - 1) * 31 : (($jm - 7) * 30) + 186);
$gy += 400 * ((int)($days / 146097));
$days %= 146097;
if ($days > 36524) {
$gy += 100 * ((int)(--$days / 36524));
$days %= 36524;
if ($days >= 365) $days++;
}
$gy += 4 * ((int)(($days) / 1461));
$days %= 1461;
$gy += (int)(($days - 1) / 365);
if ($days > 365) $days = ($days - 1) % 365;
$gd = $days + 1;
foreach (array(0, 31, ((($gy % 4 == 0) and ($gy % 100 != 0)) or ($gy % 400 == 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) as $gm => $v) {
if ($gd <= $v) break;
$gd -= $v;
}
return ($mod === '') ? array($gy, $gm, $gd) : $gy . $mod . $gm . $mod . $gd;
}
函数jalali_to_gregorian($jy,$jm,$jd,$mod='')
{
如果($jy>979){
$gy=1600;
$jy-=979;
}否则{
$gy=621;
}
$days=(365*$jy)+((int)($jy/33))*8)+((int)(($jy%33)+3)/4)+78+$jd+($jm<7)?($jm-1)*31:($jm-7)*30)+186;
$gy+=400*((整数)($days/146097));
$days%=146097;
如果($天>36524){
$gy+=100*((整数)(-$days/36524));
$days%=36524;
如果($days>=365)$days++;
}
$gy+=4*((整数)($days)/1461));
$days%=1461;
$gy+=(整数)($days-1)/365);
如果($days>365)$days=($days-1)%365;
$gd=$days+1;
foreach(数组(0,31,(($gy%4==0)和($gy%100!=0))或($gy%400==0))?29:28,31,30,31,31,31,31,31,30,31作为$gm=>v){
如果需要,谢谢,但我如何将主题与codeigniter集成?如何在库中使用它们?理想情况下,您应该使用或类似的工具来集成外部库