Skip to content

Commit 7c5f47c

Browse files
committed
remove duplicate code
1 parent 0e0f5f5 commit 7c5f47c

File tree

1 file changed

+3
-308
lines changed

1 file changed

+3
-308
lines changed

src/Dcter.php

Lines changed: 3 additions & 308 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
<?php
22

33
namespace HanifHefaz\Dcter;
4-
use \Carbon\Carbon;
4+
5+
use Carbon\Carbon;
56
use Exception;
67

8+
79
// With modification from https://github.com/roozbeh360
810
// and,
911
// https://github.com/rabeeaali
1012

11-
1213
class Dcter
1314
{
1415
public static $Day;
@@ -629,309 +630,3 @@ public static function toCarbonJalali($jalaliDate)
629630
return self::toCarbonFromJalali($jalaliDate);
630631
}
631632
}
632-
633-
class Dcter
634-
{
635-
public static $Day;
636-
public static $Month;
637-
public static $Year;
638-
639-
// function to convert Hijri Qamari (Islamic) Year to Gregorian
640-
public static function HijriToGregorian($date, $format = "YYYY-MM-DD")
641-
{
642-
self::ConstructDayMonthYear($date, $format);
643-
$d = intval(self::$Day);
644-
$m = intval(self::$Month);
645-
$y = intval(self::$Year);
646-
647-
if ($y < 1700) {
648-
649-
$jd = self::intPart((11 * $y + 3) / 30) + 354 * $y + 30 * $m - self::intPart(($m - 1) / 2) + $d + 1948440 - 385;
650-
651-
if ($jd > 2299160) {
652-
$l = $jd + 68569;
653-
$n = self::intPart((4 * $l) / 146097);
654-
$l = $l - self::intPart((146097 * $n + 3) / 4);
655-
$i = self::intPart((4000 * ($l + 1)) / 1461001);
656-
$l = $l - self::intPart((1461 * $i) / 4) + 31;
657-
$j = self::intPart((80 * $l) / 2447);
658-
$d = $l - self::intPart((2447 * $j) / 80);
659-
$l = self::intPart($j / 11);
660-
$m = $j + 2 - 12 * $l;
661-
$y = 100 * ($n - 49) + $i + $l;
662-
} else {
663-
$j = $jd + 1402;
664-
$k = self::intPart(($j - 1) / 1461);
665-
$l = $j - 1461 * $k;
666-
$n = self::intPart(($l - 1) / 365) - self::intPart($l / 1461);
667-
$i = $l - 365 * $n + 30;
668-
$j = self::intPart((80 * $i) / 2447);
669-
$d = $i - self::intPart((2447 * $j) / 80);
670-
$i = self::intPart($j / 11);
671-
$m = $j + 2 - 12 * $i;
672-
$y = 4 * $k + $n + $i - 4716;
673-
}
674-
675-
if ($d < 10)
676-
$d = "0" . $d;
677-
678-
if ($m < 10)
679-
$m = "0" . $m;
680-
return $y . "-" . $m . "-" . $d;
681-
} else
682-
return "";
683-
}
684-
685-
public static function intPart($floatNum)
686-
{
687-
if ($floatNum < -0.0000001) {
688-
return ceil($floatNum - 0.0000001);
689-
}
690-
return floor($floatNum + 0.0000001);
691-
}
692-
693-
// fucntion to construct day, month and year.
694-
public static function ConstructDayMonthYear($date, $format)
695-
{
696-
self::$Day = "";
697-
self::$Month = "";
698-
self::$Year = "";
699-
700-
if($date != null) {
701-
$format = strtoupper($format);
702-
$format_Ar = str_split($format);
703-
$srcDate_Ar = str_split($date);
704-
for ($i = 0; $i < count($format_Ar); $i++) {
705-
if (isset($srcDate_Ar[$i])) {
706-
switch ($format_Ar[$i]) {
707-
case "D":
708-
self::$Day .= $srcDate_Ar[$i];
709-
break;
710-
case "M":
711-
self::$Month .= $srcDate_Ar[$i];
712-
break;
713-
case "Y":
714-
self::$Year .= $srcDate_Ar[$i];
715-
break;
716-
}
717-
}
718-
}
719-
}
720-
}
721-
722-
// fucntion to convert Gregorian date to Hijri Qamari date.
723-
public static function GregorianToHijri($date, $format = "YYYY-MM-DD")
724-
{
725-
self::ConstructDayMonthYear($date, $format);
726-
$d = intval(self::$Day);
727-
$m = intval(self::$Month);
728-
$y = intval(self::$Year);
729-
730-
if ($y > 1700) {
731-
if (($y > 1582) || (($y == 1582) && ($m > 10)) || (($y == 1582) && ($m == 10) && ($d > 14))) {
732-
$jd = self::intPart((1461 * ($y + 4800 + self::intPart(($m - 14) / 12))) / 4) + self::intPart((367 * ($m - 2 - 12 * (self::intPart(($m - 14) / 12)))) / 12) - self::intPart((3 * (self::intPart(($y + 4900 + self::intPart(($m - 14) / 12)) / 100))) / 4) + $d - 32075;
733-
} else {
734-
$jd = 367 * $y - self::intPart((7 * ($y + 5001 + self::intPart(($m - 9) / 7))) / 4) + self::intPart((275 * $m) / 9) + $d + 1729777;
735-
}
736-
737-
$l = $jd - 1948440 + 10632;
738-
$n = self::intPart(($l - 1) / 10631);
739-
$l = $l - 10631 * $n + 354;
740-
$j = (self::intPart((10985 - $l) / 5316)) * (self::intPart((50 * $l) / 17719)) + (self::intPart($l / 5670)) * (self::intPart((43 * $l) / 15238));
741-
$l = $l - (self::intPart((30 - $j) / 15)) * (self::intPart((17719 * $j) / 50)) - (self::intPart($j / 16)) * (self::intPart((15238 * $j) / 43)) + 29;
742-
$m = self::intPart((24 * $l) / 709);
743-
$d = $l - self::intPart((709 * $m) / 24);
744-
$y = 30 * $n + $j - 30;
745-
746-
if ($d < 10)
747-
$d = "0" . $d;
748-
749-
if ($m < 10)
750-
$m = "0" . $m;
751-
return $y . "-" . $m . "-" . $d;
752-
} else
753-
return "";
754-
}
755-
756-
// Convert Julian day to Hijri Qamari date
757-
public static function JulianToHijri($jd)
758-
{
759-
$jd = $jd - 1948440 + 10632;
760-
$n = (int)(($jd - 1) / 10631);
761-
$jd = $jd - 10631 * $n + 354;
762-
$j = ((int)((10985 - $jd) / 5316)) *
763-
((int)(50 * $jd / 17719)) +
764-
((int)($jd / 5670)) *
765-
((int)(43 * $jd / 15238));
766-
$jd = $jd - ((int)((30 - $j) / 15)) *
767-
((int)((17719 * $j) / 50)) -
768-
((int)($j / 16)) *
769-
((int)((15238 * $j) / 43)) + 29;
770-
$m = (int)(24 * $jd / 709);
771-
$d = $jd - (int)(709 * $m / 24);
772-
$y = 30*$n + $j - 30;
773-
774-
return $y . "-" . $m . "-" . $d;
775-
}
776-
777-
// function to convert Hijri Qamari date to Julian.
778-
public static function HijriToJulian($date){
779-
$array = explode('-', $date);
780-
781-
$y = $array[0];
782-
$m = $array[1];
783-
$d = $array[2];
784-
return (int)((11 * $y + 3) / 30) + 354 * $y +
785-
30 * $m - (int)(($m - 1) / 2) + $d + 1948440 - 385;
786-
}
787-
788-
static function Division($a,$b)
789-
{
790-
return (int) ($a / $b);
791-
}
792-
793-
// fucntion to convert Gregorian Date to Jalali Date.
794-
public static function GregorianToJalali ($date, $format = "YYYY-MM-DD")
795-
{
796-
self::ConstructDayMonthYear($date, $format);
797-
$g_d = intval(self::$Day);
798-
$g_m = intval(self::$Month);
799-
$g_y = intval(self::$Year);
800-
801-
$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
802-
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
803-
804-
805-
$gy = $g_y-1600;
806-
$gm = $g_m-1;
807-
$gd = $g_d-1;
808-
809-
$g_day_no = 365*$gy+self::Division($gy+3,4)-self::Division($gy+99,100)+self::Division($gy+399,400);
810-
811-
for ($i=0; $i < $gm; ++$i)
812-
$g_day_no += $g_days_in_month[$i];
813-
if ($gm>1 && (($gy%4==0 && $gy%100!=0) || ($gy%400==0)))
814-
/* leap and after Feb */
815-
$g_day_no++;
816-
$g_day_no += $gd;
817-
818-
$j_day_no = $g_day_no-79;
819-
820-
$j_np = self::Division($j_day_no, 12053); /* 12053 = 365*33 + 32/4 */
821-
$j_day_no = $j_day_no % 12053;
822-
823-
$jy = 979+33*$j_np+4*self::Division($j_day_no,1461); /* 1461 = 365*4 + 4/4 */
824-
825-
$j_day_no %= 1461;
826-
827-
if ($j_day_no >= 366) {
828-
$jy += self::Division($j_day_no-1, 365);
829-
$j_day_no = ($j_day_no-1)%365;
830-
}
831-
832-
for ($i = 0; $i < 11 && $j_day_no >= $j_days_in_month[$i]; ++$i)
833-
$j_day_no -= $j_days_in_month[$i];
834-
$jm = $i+1;
835-
if($jm<10)
836-
$jm = "0". $jm;
837-
838-
$jd = $j_day_no+1;
839-
if($jd<10)
840-
$jd = "0". $jd;
841-
return $jy . "-" . $jm . "-" . $jd;
842-
}
843-
844-
// function to convert Jalali date to Gregorian date.
845-
public static function JalaliToGregorian($date, $format="YYYY-MM-DD")
846-
{
847-
self::ConstructDayMonthYear($date, $format);
848-
$j_d = intval(self::$Day);
849-
$j_m = intval(self::$Month);
850-
$j_y = intval(self::$Year);
851-
852-
853-
$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
854-
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
855-
856-
857-
$jy = (int)($j_y)-979;
858-
$jm = (int)($j_m)-1;
859-
$jd = (int)($j_d)-1;
860-
861-
$j_day_no = 365*$jy + self::Division($jy, 33)*8 + self::Division($jy%33+3, 4);
862-
863-
for ($i=0; $i < $jm; ++$i)
864-
$j_day_no += $j_days_in_month[$i];
865-
866-
$j_day_no += $jd;
867-
868-
$g_day_no = $j_day_no+79;
869-
870-
$gy = 1600 + 400*self::Division($g_day_no, 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
871-
$g_day_no = $g_day_no % 146097;
872-
873-
$leap = true;
874-
if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
875-
{
876-
$g_day_no--;
877-
$gy += 100*self::Division($g_day_no, 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
878-
$g_day_no = $g_day_no % 36524;
879-
880-
if ($g_day_no >= 365)
881-
$g_day_no++;
882-
else
883-
$leap = false;
884-
}
885-
886-
$gy += 4*self::Division($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */
887-
$g_day_no %= 1461;
888-
889-
if ($g_day_no >= 366) {
890-
$leap = false;
891-
892-
$g_day_no--;
893-
$gy += self::Division($g_day_no, 365);
894-
$g_day_no = $g_day_no % 365;
895-
}
896-
897-
for ($i = 0; $g_day_no >= $g_days_in_month[$i] + ($i == 1 && $leap); $i++)
898-
$g_day_no -= $g_days_in_month[$i] + ($i == 1 && $leap);
899-
$gm = $i+1;
900-
901-
if($gm<10)
902-
$gm = "0". $gm;
903-
904-
905-
$gd = $g_day_no+1;
906-
if($gd<10)
907-
$gd = "0". $gd;
908-
909-
return $gy . "-" . $gm . "-" . $gd;
910-
}
911-
912-
// Make carbon date object from any converted date.
913-
914-
public static function Carbonize($date)
915-
{
916-
return Carbon::parse($date);
917-
}
918-
919-
// Function to convert Hijri to Jalali date.
920-
921-
public static function HijriToJalali($date, $format = "YYYY-MM-DD")
922-
{
923-
$gregorianDate = self::HijriToGregorian($date);
924-
$jalali = self::GregorianToJalali($gregorianDate);
925-
return $jalali;
926-
}
927-
928-
// Function to convert Jalali to Hijri date.
929-
930-
public static function JalaliToHijri($date, $format = "YYYY-MM-DD")
931-
{
932-
$gregorianDate = self::JalaliToGregorian($date);
933-
$hijri = self::GregorianToHijri($gregorianDate);
934-
935-
return $hijri;
936-
}
937-
}

0 commit comments

Comments
 (0)