Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / robo / src / Common / TimeKeeper.php
diff --git a/vendor/consolidation/robo/src/Common/TimeKeeper.php b/vendor/consolidation/robo/src/Common/TimeKeeper.php
new file mode 100644 (file)
index 0000000..1cd3e33
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+namespace Robo\Common;
+
+class TimeKeeper
+{
+    const MINUTE = 60;
+    const HOUR = 3600;
+    const DAY = 86400;
+
+    /**
+     * @var float
+     */
+    protected $startedAt;
+
+    /**
+     * @var float
+     */
+    protected $finishedAt;
+
+    public function start()
+    {
+        if ($this->startedAt) {
+            return;
+        }
+        // Get time in seconds as a float, accurate to the microsecond.
+        $this->startedAt = microtime(true);
+    }
+
+    public function stop()
+    {
+        $this->finishedAt = microtime(true);
+    }
+
+    /**
+     * @return float|null
+     */
+    public function elapsed()
+    {
+        $finished = $this->finishedAt ? $this->finishedAt : microtime(true);
+        if ($finished - $this->startedAt <= 0) {
+            return null;
+        }
+        return $finished - $this->startedAt;
+    }
+
+    /**
+     * Format a duration into a human-readable time
+     *
+     * @param float $duration Duration in seconds, with fractional component
+     *
+     * @return string
+     */
+    public static function formatDuration($duration)
+    {
+        if ($duration >= self::DAY * 2) {
+            return gmdate('z \d\a\y\s H:i:s', $duration);
+        }
+        if ($duration > self::DAY) {
+            return gmdate('\1 \d\a\y H:i:s', $duration);
+        }
+        if ($duration > self::HOUR) {
+            return gmdate("H:i:s", $duration);
+        }
+        if ($duration > self::MINUTE) {
+            return gmdate("i:s", $duration);
+        }
+        return round($duration, 3).'s';
+    }
+}