Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15426473
D7216.id16255.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Referenced Files
None
Subscribers
None
D7216.id16255.diff
View Options
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -191,6 +191,8 @@
'PhutilLipsumContextFreeGrammar' => 'grammar/PhutilLipsumContextFreeGrammar.php',
'PhutilLock' => 'filesystem/PhutilLock.php',
'PhutilLockException' => 'filesystem/PhutilLockException.php',
+ 'PhutilLunarPhase' => 'utils/PhutilLunarPhase.php',
+ 'PhutilLunarPhaseTestCase' => 'utils/__tests__/PhutilLunarPhaseTestCase.php',
'PhutilMarkupEngine' => 'markup/PhutilMarkupEngine.php',
'PhutilMarkupTestCase' => 'markup/__tests__/PhutilMarkupTestCase.php',
'PhutilMetricsChannel' => 'channel/PhutilMetricsChannel.php',
@@ -548,6 +550,7 @@
'PhutilLexerSyntaxHighlighter' => 'PhutilSyntaxHighlighter',
'PhutilLipsumContextFreeGrammar' => 'PhutilContextFreeGrammar',
'PhutilLockException' => 'Exception',
+ 'PhutilLunarPhaseTestCase' => 'PhutilTestCase',
'PhutilMarkupTestCase' => 'PhutilTestCase',
'PhutilMetricsChannel' => 'PhutilChannelChannel',
'PhutilMissingSymbolException' => 'Exception',
Index: src/utils/PhutilLunarPhase.php
===================================================================
--- /dev/null
+++ src/utils/PhutilLunarPhase.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Compute the phase of the terran moon for a given epoch.
+ *
+ * $moon = new PhutilLunarPhase(time());
+ * $moon->isFull();
+ */
+final class PhutilLunarPhase {
+
+ private $epoch;
+
+ public function __construct($epoch) {
+ $this->epoch = $epoch;
+ }
+
+ private function getPhase() {
+ // (Aug 11, 1999) A new moon.
+ $new_moon_epoch = 934354800;
+
+ // Number of seconds in the lunar phase.
+ $phase_length = 2551442.8768992;
+
+ return fmod($this->epoch - $new_moon_epoch, $phase_length) / 2551443;
+ }
+
+ public function isFull() {
+ return abs($this->getPhase() - 0.5) < 0.02;
+ }
+
+ public function isNew() {
+ return $this->getPhase() < 0.02 || $this->getPhase() > 0.98;
+ }
+
+ public function isWaxing() {
+ return $this->getPhase() < 0.5;
+ }
+
+ public function isWaning() {
+ return $this->getPhase() > 0.5;
+ }
+
+}
Index: src/utils/__tests__/PhutilLunarPhaseTestCase.php
===================================================================
--- /dev/null
+++ src/utils/__tests__/PhutilLunarPhaseTestCase.php
@@ -0,0 +1,59 @@
+<?php
+
+final class PhutilLunarPhaseTestCase extends PhutilTestCase {
+
+ public function testLunarPhases() {
+
+ // Aug 11, 1999
+ $moon = new PhutilLunarPhase(934354800);
+ $this->assertEqual(false, $moon->isFull());
+ $this->assertEqual(true, $moon->isNew());
+ $this->assertEqual(true, $moon->isWaxing());
+ $this->assertEqual(false, $moon->isWaning());
+
+ // May 22, 2005
+ $moon = new PhutilLunarPhase(1116745200);
+ $this->assertEqual(true, $moon->isFull());
+ $this->assertEqual(false, $moon->isNew());
+ $this->assertEqual(true, $moon->isWaxing());
+ $this->assertEqual(false, $moon->isWaning());
+
+ // May 23, 2005
+ $moon = new PhutilLunarPhase(1116831600);
+ $this->assertEqual(true, $moon->isFull());
+ $this->assertEqual(false, $moon->isNew());
+ $this->assertEqual(false, $moon->isWaxing());
+ $this->assertEqual(true, $moon->isWaning());
+
+ // May 30, 2005
+ $moon = new PhutilLunarPhase(1117436400);
+ $this->assertEqual(false, $moon->isFull());
+ $this->assertEqual(false, $moon->isNew());
+ $this->assertEqual(false, $moon->isWaxing());
+ $this->assertEqual(true, $moon->isWaning());
+
+ // June 05, 2005
+ $moon = new PhutilLunarPhase(1117954800);
+ $this->assertEqual(false, $moon->isFull());
+ $this->assertEqual(false, $moon->isNew());
+ $this->assertEqual(false, $moon->isWaxing());
+ $this->assertEqual(true, $moon->isWaning());
+
+ // June 06, 2005
+ $moon = new PhutilLunarPhase(1118041200);
+ $this->assertEqual(false, $moon->isFull());
+ $this->assertEqual(true, $moon->isNew());
+ $this->assertEqual(false, $moon->isWaxing());
+ $this->assertEqual(true, $moon->isWaning());
+
+ // Oct 4, 2013
+ $moon = new PhutilLunarPhase(1380897327);
+ $this->assertEqual(false, $moon->isFull());
+ $this->assertEqual(true, $moon->isNew());
+ $this->assertEqual(true, $moon->isWaxing());
+ $this->assertEqual(false, $moon->isWaning());
+
+ }
+
+
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 24, 8:57 AM (4 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7719981
Default Alt Text
D7216.id16255.diff (4 KB)
Attached To
Mode
D7216: Add PhutilLunarPhase, for computing phases of the moon
Attached
Detach File
Event Timeline
Log In to Comment