Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $wgHooks['ParserFirstCallInit'][] = 'efSternzeitSetup';
- $wgExtensionCredits['parserhook'][] = array ('name' => "Sternzeit", 'description' => "Zeigt Sternzeit mit Erddatum bei Mouseover", 'author' => "Jason Myrdin");
- function efSternzeitSetup ( &$parser ) {
- $parser->setHook( 'sternzeit', 'efSternzeitRender' );
- return true;
- }
- function efSternzeitRender( $input, $args, $parser ) {
- global $wgScript;
- if (!isset($args['sd']) || $args['sd'] == "" || preg_match("/^[0-9]{1,}\.{0,1}[0-9]{0,2}$/", $args['sd']) == 0) {
- return $sd;
- }
- $sd = htmlspecialchars($args['sd']);
- $rd = efSternzeitNachDatum($sd);
- $sd = preg_replace("/\./", ",", $sd);
- $ausgabe = "<a href=\"$wgScript/Sternzeit\" title=\"Sternzeit\"><b><i>SZ</i></b></a> <span title=\"$rd\" class=\"sternzeit\">$sd</span>";
- return $ausgabe;
- }
- /**
- * Berechnet das gregorianische Datum aus der Sternzeit.
- *
- */
- function efSternzeitNachDatum($sd) {
- $zeit = array();
- $zeit['jahr'] = 1000;
- $zeit['tag'] = $zeit['jahr'] / 365.25;
- $zeit['stunde'] = $zeit['tag'] / 24;
- $zeit['minute'] = $zeit['stunde'] / 60;
- $zeit['sekunde'] = $zeit['minute'] / 60;
- $monate = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
- $days = $hours = $minutes = 0;
- while($sd > $zeit['tag']) {
- $days++;
- $sd -= $zeit['tag'];
- }
- while($sd > $zeit['stunde']) {
- $hours++;
- $sd -= $zeit['stunde'];
- }
- while($sd > $zeit['minute']) {
- $minutes++;
- $sd -= $zeit['minute'];
- }
- $djahr = 2323;
- while($days > efSternzeitTageImJahr($djahr) - 1) {
- $days -= efSternzeitTageImJahr($djahr);
- $djahr++;
- }
- if($djahr % 4 == 0) $monate[1] = 29;
- $dmonat = 1;
- for($i = 0; $days > $monate[$i]; $i++) {
- $dmonat++;
- $days -= $monate[$i];
- }
- $dtag = $days + 1;
- $wtag = efSternzeitWochentag($dtag, $dmonat, $djahr);
- return "$wtag $dtag.$dmonat.$djahr " . str_pad($hours, 2, '0', STR_PAD_LEFT) . ":" . str_pad($minutes, 2, '0', STR_PAD_LEFT);
- }
- function efSternzeitTageImJahr($jahr) {
- if($jahr % 4 == 0) return 366;
- else return 365;
- }
- /**
- * Berechnet Wochentage nach Zellers Kongruenz.
- *
- */
- function efSternzeitWochentag($q, $m, $jahr) {
- $tage = array("Samstag", "Sonntag", "Montag", "Dienstag", "Mittwoch",
- "Donnerstag", "Freitag");
- $J = ($jahr - ($jahr % 100)) / 100;
- $K = $jahr - $J * 100;
- if($m < 3) {
- $m += 10;
- $K--;
- }
- if($K < 0) {
- $J--;
- $K++;
- }
- $h = ( $q + floor( ($m + 1) * 26 / 10 ) + $K
- + floor($K / 4) + floor($J / 4) - 2 * $J) % 7;
- return $tage[$h];
- }
- ?>
Add Comment
Please, Sign In to add comment