summaryrefslogtreecommitdiff
path: root/app/Helper/DateHelper.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Helper/DateHelper.php')
-rw-r--r--app/Helper/DateHelper.php157
1 files changed, 157 insertions, 0 deletions
diff --git a/app/Helper/DateHelper.php b/app/Helper/DateHelper.php
new file mode 100644
index 00000000..3844ce64
--- /dev/null
+++ b/app/Helper/DateHelper.php
@@ -0,0 +1,157 @@
+<?php
+
+namespace Kanboard\Helper;
+
+use DateTime;
+use Kanboard\Core\Base;
+
+/**
+ * DateTime helpers
+ *
+ * @package helper
+ * @author Frederic Guillot
+ */
+class DateHelper extends Base
+{
+ /**
+ * Get formatted time
+ *
+ * @access public
+ * @param integer $value
+ * @return string
+ */
+ public function time($value)
+ {
+ return date($this->config->get('application_time_format', 'H:i'), $value);
+ }
+
+ /**
+ * Get formatted date
+ *
+ * @access public
+ * @param integer $value
+ * @return string
+ */
+ public function date($value)
+ {
+ if (empty($value)) {
+ return '';
+ }
+
+ if (! ctype_digit($value)) {
+ $value = strtotime($value);
+ }
+
+ return date($this->config->get('application_date_format', 'm/d/Y'), $value);
+ }
+
+ /**
+ * Get formatted datetime
+ *
+ * @access public
+ * @param integer $value
+ * @return string
+ */
+ public function datetime($value)
+ {
+ return date($this->config->get('application_datetime_format', 'm/d/Y H:i'), $value);
+ }
+
+ /**
+ * Get duration in seconds into human format
+ *
+ * @access public
+ * @param integer $seconds
+ * @return string
+ */
+ public function duration($seconds)
+ {
+ if ($seconds == 0) {
+ return 0;
+ }
+
+ $dtF = new DateTime("@0");
+ $dtT = new DateTime("@$seconds");
+ return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
+ }
+
+ /**
+ * Get the age of an item in quasi human readable format.
+ * It's in this format: <1h , NNh, NNd
+ *
+ * @access public
+ * @param integer $timestamp Unix timestamp of the artifact for which age will be calculated
+ * @param integer $now Compare with this timestamp (Default value is the current unix timestamp)
+ * @return string
+ */
+ public function age($timestamp, $now = null)
+ {
+ if ($now === null) {
+ $now = time();
+ }
+
+ $diff = $now - $timestamp;
+
+ if ($diff < 900) {
+ return t('<15m');
+ }
+ if ($diff < 1200) {
+ return t('<30m');
+ } elseif ($diff < 3600) {
+ return t('<1h');
+ } elseif ($diff < 86400) {
+ return '~'.t('%dh', $diff / 3600);
+ }
+
+ return t('%dd', ($now - $timestamp) / 86400);
+ }
+
+ /**
+ * Get all hours for day
+ *
+ * @access public
+ * @return array
+ */
+ public function getDayHours()
+ {
+ $values = array();
+
+ foreach (range(0, 23) as $hour) {
+ foreach (array(0, 30) as $minute) {
+ $time = sprintf('%02d:%02d', $hour, $minute);
+ $values[$time] = $time;
+ }
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get all days of a week
+ *
+ * @access public
+ * @return array
+ */
+ public function getWeekDays()
+ {
+ $values = array();
+
+ foreach (range(1, 7) as $day) {
+ $values[$day] = $this->getWeekDay($day);
+ }
+
+ return $values;
+ }
+
+ /**
+ * Get the localized day name from the day number
+ *
+ * @access public
+ * @param integer $day Day number
+ * @return string
+ */
+ public function getWeekDay($day)
+ {
+ return date('l', strtotime('next Monday +'.($day - 1).' days'));
+ }
+}