Guest User

Untitled

a guest
May 25th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. <?php
  2.  
  3. $wgHooks['ParserFirstCallInit'][] = 'efSternzeitSetup';
  4.  
  5. $wgExtensionCredits['parserhook'][] = array ('name' => "Sternzeit", 'description' => "Zeigt Sternzeit mit Erddatum bei Mouseover", 'author' => "Jason Myrdin");
  6.  
  7. function efSternzeitSetup ( &$parser ) {
  8. $parser->setHook( 'sternzeit', 'efSternzeitRender' );
  9. return true;
  10. }
  11.  
  12. function efSternzeitRender( $input, $args, $parser ) {
  13. global $wgScript;
  14. if (!isset($args['sd']) || $args['sd'] == "" || preg_match("/^[0-9]{1,}\.{0,1}[0-9]{0,2}$/", $args['sd']) == 0) {
  15. return $sd;
  16. }
  17. $sd = htmlspecialchars($args['sd']);
  18. $rd = efSternzeitNachDatum($sd);
  19. $sd = preg_replace("/\./", ",", $sd);
  20. $ausgabe = "<a href=\"$wgScript/Sternzeit\" title=\"Sternzeit\"><b><i>SZ</i></b></a> <span title=\"$rd\" class=\"sternzeit\">$sd</span>";
  21. return $ausgabe;
  22. }
  23.  
  24. /**
  25. * Berechnet das gregorianische Datum aus der Sternzeit.
  26. *
  27. */
  28. function efSternzeitNachDatum($sd) {
  29. $zeit = array();
  30. $zeit['jahr'] = 1000;
  31. $zeit['tag'] = $zeit['jahr'] / 365.25;
  32. $zeit['stunde'] = $zeit['tag'] / 24;
  33. $zeit['minute'] = $zeit['stunde'] / 60;
  34. $zeit['sekunde'] = $zeit['minute'] / 60;
  35. $monate = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  36.  
  37. $days = $hours = $minutes = 0;
  38.  
  39. while($sd > $zeit['tag']) {
  40. $days++;
  41. $sd -= $zeit['tag'];
  42. }
  43. while($sd > $zeit['stunde']) {
  44. $hours++;
  45. $sd -= $zeit['stunde'];
  46. }
  47. while($sd > $zeit['minute']) {
  48. $minutes++;
  49. $sd -= $zeit['minute'];
  50. }
  51.  
  52. $djahr = 2323;
  53.  
  54. while($days > efSternzeitTageImJahr($djahr) - 1) {
  55. $days -= efSternzeitTageImJahr($djahr);
  56. $djahr++;
  57. }
  58.  
  59. if($djahr % 4 == 0) $monate[1] = 29;
  60.  
  61. $dmonat = 1;
  62. for($i = 0; $days > $monate[$i]; $i++) {
  63. $dmonat++;
  64. $days -= $monate[$i];
  65. }
  66. $dtag = $days + 1;
  67. $wtag = efSternzeitWochentag($dtag, $dmonat, $djahr);
  68. return "$wtag $dtag.$dmonat.$djahr " . str_pad($hours, 2, '0', STR_PAD_LEFT) . ":" . str_pad($minutes, 2, '0', STR_PAD_LEFT);
  69. }
  70.  
  71.  
  72. function efSternzeitTageImJahr($jahr) {
  73. if($jahr % 4 == 0) return 366;
  74. else return 365;
  75. }
  76.  
  77. /**
  78. * Berechnet Wochentage nach Zellers Kongruenz.
  79. *
  80. */
  81. function efSternzeitWochentag($q, $m, $jahr) {
  82. $tage = array("Samstag", "Sonntag", "Montag", "Dienstag", "Mittwoch",
  83. "Donnerstag", "Freitag");
  84.  
  85. $J = ($jahr - ($jahr % 100)) / 100;
  86. $K = $jahr - $J * 100;
  87. if($m < 3) {
  88. $m += 10;
  89. $K--;
  90. }
  91. if($K < 0) {
  92. $J--;
  93. $K++;
  94. }
  95.  
  96. $h = ( $q + floor( ($m + 1) * 26 / 10 ) + $K
  97. + floor($K / 4) + floor($J / 4) - 2 * $J) % 7;
  98.  
  99. return $tage[$h];
  100. }
  101.  
  102. ?>
Add Comment
Please, Sign In to add comment