hotti: Class Date in 32 bit

Beitrag lesen

hi,

Du schreibst deine Klasse, weil du Speicher sparen willst(?): hast du durch irgendwelche Benchmarks Verbesserungen messen können?

Bisher kein Benchmark. Aus Erfahrung heraus ist das Aufteilen in Subklassen jedoch CPU-freundlich, Beispiel:

  
	$date = new Date_Kirche(array('date' => array(  
		1,11,2013  
	)));  
  
	$kirchenjahr = $date->kirchenjahr();  
	ksort($kirchenjahr, SORT_NUMERIC);  
	foreach($kirchenjahr as $jd => $name){  
		$d = new Date(array('julianday' => $jd));  
		echo "$d $name\n";  
	}  

D.h., in der foreach wird das Objekt nicht über die Subklasse erstellt sondern über die 'kleinere' Basisklasse. Btw., ausgegeben werden die Feiertage des Kirchenjahres:

01.01.2013 Di 01/2013 Neujahr
06.01.2013 So 01/2013 Drei Königstag
07.02.2013 Do 06/2013 Weiberfastnacht
11.02.2013 Mo 07/2013 Rosenmontag
29.03.2013 Fr 13/2013 Karfreitag
31.03.2013 So 13/2013 Ostersonntag
01.04.2013 Mo 14/2013 Ostermontag
09.05.2013 Do 19/2013 Christi Himmelfahrt
19.05.2013 So 20/2013 Pfingstsonntag
20.05.2013 Mo 21/2013 Pfingstmontag
30.05.2013 Do 22/2013 Fronleichnam
15.08.2013 Do 33/2013 Maria Himmelfahrt
20.11.2013 Mi 47/2013 Buß- und Bettag
24.11.2013 So 47/2013 Totensonntag
01.12.2013 So 48/2013 Erster Advent
08.12.2013 So 49/2013 Zweiter Advent
15.12.2013 So 50/2013 Dritter Advent
22.12.2013 So 51/2013 Vierter Advent
24.12.2013 Di 52/2013 Heiligabend
25.12.2013 Mi 52/2013 Erster Weihnachtstag
26.12.2013 Do 52/2013 Zweiter Weihnachtstag

Und noch ein Blick hinter die Kulissen um die Arbeitsweise mal zu zeigen ;)

  
	// Array mit Scaligertagen und Namen der Feiertage  
	public function kirchenjahr(){  
		$jdo = $this->ostern();  
		$class = __CLASS__;  
		$meta = new $class (array('isa' => 'testobject', 'date' => array(15,8,$this->YEAR)));  
  
		$ft = array(  
			$jdo      => 'Ostersonntag',  
			$jdo + 1  => 'Ostermontag',  
			$jdo -2   => 'Karfreitag',  
			$jdo + 39 => 'Christi Himmelfahrt',  
			$jdo + 49 => 'Pfingstsonntag',  
			$jdo + 50 => 'Pfingstmontag',  
			$jdo + 60 => 'Fronleichnam',  
			$jdo - 48 => 'Rosenmontag',  
			$jdo - 52 => 'Weiberfastnacht',  
			$meta->JD => 'Maria Himmelfahrt',  
		);  
  
		// 1.1. Neujahr  
		$jd = $meta->EPOCH == 'G' ? $meta->jd_greg(1,1,$this->YEAR) : $meta->jd_juli(1,1,$this->YEAR);  
		$ft[$jd] = 'Neujahr';  
  
		// 6.1. Drei Könige  
		$ft[$jd+5] = 'Drei Königstag';  
  
		// 24.12. Heiligabend  
		$jd = $meta->EPOCH == 'G' ? $meta->jd_greg(24,12,$this->YEAR) : $meta->jd_juli(24,12,$this->YEAR);  
		$ft[$jd] = 'Heiligabend';  
		$ft[$jd+1] = 'Erster Weihnachtstag';  
		$ft[$jd+2] = 'Zweiter Weihnachtstag';  
  
		// Der erste Advent ist der Sonntag zwischen dem 27.11. und dem 03.12.  
		// Der erste Advent ist der erste Sonntag nach dem 26.11.  
		// Der vierte Advend ist der letzte Sonntag vor dem 25.12.  
		// Ergo, Rechenweg: Bestimme JD für 26.11. und den numerischen Wochentag  
		$jd2611 = $meta->EPOCH == 'G' ? $meta->jd_greg(26,11,$this->YEAR) : $meta->jd_juli(26,11,$this->YEAR);  
		$wochentag2611 = (1 + ($jd2611 % 7));  
		$advent1 = $jd2611 + 7 - $wochentag2611;  
		// fällt dieser Tag auf den 27.11. oder davor, ist der 1. Advent eine Woche später  
		if($advent1 <= ($jd2611 + 1)) $advent1 += 7;  
		$ft[$advent1]      = 'Erster Advent';  
		$ft[$advent1 + 7]  = 'Zweiter Advent';  
		$ft[$advent1 + 14] = 'Dritter Advent';  
		$ft[$advent1 + 21] = 'Vierter Advent';  
		$ft[$advent1 - 7]  = 'Totensonntag';  
		$ft[$advent1 - 11] = 'Buß- und Bettag';  
		return $ft;  
	}  

Schönes Wochenende!

0 56

Meine Güte, 64 Bit...

hotti
  • php
  1. 0
    Der Martin
    1. 0
      hotti
      1. 0
        Der Martin
        1. 0
          MudGuard
          1. 0
            Der Martin
          2. 0
            Dummerchen
            1. 0
              Der Martin
              1. 0
                Dummerchen
                1. 0
                  Der Martin
                  1. 0
                    Dummerchen
                    1. 0
                      Matze
        2. 0
          hotti
          1. 0
            dedlfix
            1. 0
              hotti
              1. 0
                dedlfix
                1. 0
                  Matti Mäkitalo
                  1. 0

                    ...muss das denn sein?

                    Matze
                    • menschelei
                    1. 0
                      dedlfix
                      1. 0
                        Matze
                        1. 0
                          Siri
                        2. 0
                          dedlfix
                          1. 0
                            Der Martin
                          2. 0
                            Matze
      2. -1
        Encoder
    2. 0
      T-Rex
      1. 0
        ichbinich
  2. 0

    Class Date in 32 bit

    hotti
    1. 0
      Sven Rautenberg
      1. 0
        hotti
        1. 0
          MudGuard
          1. 0
            hotti
            1. 0
              JürgenB
              1. 0
                Der Martin
                1. 0
                  MudGuard
                2. 0
                  JürgenB
                  1. 0
                    Der Martin
                    1. 0
                      JürgenB
              2. 0
                hotti
                1. 0
                  JürgenB
                2. 1
                  dedlfix
        2. 0
          Matti Mäkitalo
          1. 0
            hotti
            1. 0
              Matti Mäkitalo
              1. 0
                hotti
              2. 0
                hotti
                1. 0
                  MudGuard
                  1. 0
                    hotti
                  2. 0

                    ähmm

                    hotti
                    1. 0
                      MudGuard
                      1. 0
                        hotti
                        1. 0
                          hotti
                          1. 0
                            Jens Holzkämper
                  3. 0
                    Christian Kruse
                    1. 0
                      Der Martin
                      1. 0
                        Christian Kruse