PageRenderTime 32ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/quick/cse_fwdctx.php

http://github.com/facebook/hiphop-php
PHP | 68 lines | 59 code | 9 blank | 0 comment | 13 complexity | f7ee00b0d3263243928dc15aca3ad5ba MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?hh
  2. final class HijriBirthday {
  3. public function convertSolarToLunar($year, $month, $date) {
  4. return HijriConverter::gregorianToHijri($year, $month, $date);
  5. }
  6. }
  7. class HijriConverter {
  8. public static function intPart($float) {
  9. if ($float < -0.0000001) {
  10. return ceil($float - 0.0000001);
  11. }
  12. return floor($float + 0.0000001);
  13. }
  14. public static function gregorianToHijri($y, $m, $d) {
  15. if ($y > 1700) {
  16. if (($y > 1582) || (($y == 1582) && ($m > 10)) ||
  17. (($y == 1582) && ($m == 10) && ($d > 14))) {
  18. $jd = self::intPart(
  19. (1461 * ($y + 4800 + self::intPart(($m - 14) / 12))) / 4
  20. ) + self::intPart(
  21. (367 * ($m - 2 - 12 * (self::intPart(($m - 14) / 12)))) / 12
  22. ) - self::intPart((3 * (
  23. self::intPart(($y + 4900 + self::intPart(($m - 14) / 12)) / 100)
  24. )) / 4) + $d - 32075;
  25. } else {
  26. $jd = 367 * $y - self::intPart(
  27. (7 * ($y + 5001 + self::intPart(($m - 9) / 7))) / 4
  28. ) + self::intPart((275 * $m) / 9) + $d + 1729777;
  29. }
  30. $l = $jd - 1948440 + 10632;
  31. $n = self::intPart(($l - 1) / 10631);
  32. $l = $l - 10631 * $n + 354;
  33. $j = (self::intPart((10985 - $l) / 5316)) *
  34. (self::intPart(( 50 * $l) / 17719)) +
  35. (self::intPart($l / 5670)) * (self::intPart((43 * $l) / 15238));
  36. $l = $l - (self::intPart((30 - $j) / 15)) *
  37. (self::intPart((17719 * $j) / 50)) -
  38. (self::intPart($j / 16)) * (self::intPart((15238 * $j) / 43)) + 29;
  39. $m = self::intPart((24 * $l) / 709);
  40. $d = $l - self::intPart((709 * $m) / 24);
  41. $y = 30 * $n + $j - 30;
  42. if ($d < 10)
  43. $d = "0".$d;
  44. if ($m < 10)
  45. $m = "0".$m;
  46. return varray[$y, $m, $d];
  47. }
  48. return varray[];
  49. }
  50. }
  51. function main() {
  52. var_dump((new HijriBirthday)->convertSolarToLunar(1983, (float)31, 7));
  53. var_dump((new HijriBirthday)->convertSolarToLunar(1983, (float)31, 7));
  54. var_dump((new HijriBirthday)->convertSolarToLunar(1983, (float)31, 7));
  55. }
  56. <<__EntryPoint>> function main_entry(): void {
  57. main();
  58. echo "done\n";
  59. }