persian_date-8.x-4.1/src/PersianDateHelper.php

src/PersianDateHelper.php
<?php
/**
 * Created by PhpStorm.
 * User: evolve
 * Date: 10/3/17
 * Time: 9:37 PM
 */

namespace Drupal\persian_date;


use Drupal\Core\Datetime\DateHelper;
use Drupal\persian_date\Plugin\Datetime\PersianDrupalDateTime as DrupalDateTime;

class PersianDateHelper extends DateHelper
{

    /**
     * Constructs an untranslated array of month names.
     *
     * @return array
     *   An array of month names.
     */
    public static function monthNamesUntranslated() {
        // Force the key to use the correct month value, rather than
        // starting with zero.
        return [
            1  => 'فروردین',
            2  => 'اردیبهشت',
            3  => 'خرداد',
            4  => 'تیر',
            5  => 'مرداد',
            6  => 'شهریور',
            7  => 'مهر',
            8  => 'آبان',
            9  => 'آذر',
            10 => 'دی',
            11 => 'بهمن',
            12 => 'اسفند',
        ];
    }

    /**
     * Constructs an untranslated array of abbreviated month names.
     *
     * @return array
     *   An array of month names.
     */
    public static function monthNamesAbbrUntranslated() {
        // Force the key to use the correct month value, rather than
        // starting with zero.
        return self::monthNamesUntranslated();
    }

    /**
     * Returns a translated array of month names.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of month names.
     */
    public static function monthNames($required = FALSE) {
        // Force the key to use the correct month value, rather than
        // starting with zero.
        $monthnames = [
            1  => t('فروردین', [], ['context' => 'Long month name']),
            2  => t('اردیبهشت', [], ['context' => 'Long month name']),
            3  => t('خرداد', [], ['context' => 'Long month name']),
            4  => t('تیر', [], ['context' => 'Long month name']),
            5  => t('مرداد', [], ['context' => 'Long month name']),
            6  => t('شهریور', [], ['context' => 'Long month name']),
            7  => t('مهر', [], ['context' => 'Long month name']),
            8  => t('آبان', [], ['context' => 'Long month name']),
            9  => t('آذر', [], ['context' => 'Long month name']),
            10 => t('دی', [], ['context' => 'Long month name']),
            11 => t('بهمن', [], ['context' => 'Long month name']),
            12 => t('اسفند', [], ['context' => 'Long month name']),
        ];
        $none = ['' => ''];
        return !$required ? $none + $monthnames : $monthnames;
    }

    /**
     * Constructs a translated array of month name abbreviations
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of month abbreviations.
     */
    public static function monthNamesAbbr($required = FALSE) {
        // Force the key to use the correct month value, rather than
        // starting with zero.
        $monthnames = [
            1  => t('فروردین', [], ['context' => 'Abbreviated month name']),
            2  => t('اردیبهشت', [], ['context' => 'Abbreviated month name']),
            3  => t('خرداد', [], ['context' => 'Abbreviated month name']),
            4  => t('تیر', [], ['context' => 'Abbreviated month name']),
            5  => t('مرداد', [], ['context' => 'Abbreviated month name']),
            6  => t('شهریور', [], ['context' => 'Abbreviated month name']),
            7  => t('مهر', [], ['context' => 'Abbreviated month name']),
            8  => t('آبان', [], ['context' => 'Abbreviated month name']),
            9  => t('آذر', [], ['context' => 'Abbreviated month name']),
            10 => t('دی', [], ['context' => 'Abbreviated month name']),
            11 => t('بهمن', [], ['context' => 'Abbreviated month name']),
            12 => t('اسفند', [], ['context' => 'Abbreviated month name']),
        ];
        $none = ['' => ''];
        return !$required ? $none + $monthnames : $monthnames;
    }

    /**
     * Constructs an untranslated array of week days.
     *
     * @return array
     *   An array of week day names
     */
    public static function weekDaysUntranslated() {
        return [
            'Sunday',
            'Monday',
            'Tuesday',
            'Wednesday',
            'Thursday',
            'Friday',
            'Saturday',
        ];
    }

    /**
     * Returns a translated array of week names.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of week day names
     */
    public static function weekDays($required = FALSE) {
        $weekdays = [
            t('Sunday'),
            t('Monday'),
            t('Tuesday'),
            t('Wednesday'),
            t('Thursday'),
            t('Friday'),
            t('Saturday'),
        ];
        $none = ['' => ''];
        return !$required ? $none + $weekdays : $weekdays;
    }

    /**
     * Constructs a translated array of week day abbreviations.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of week day abbreviations
     */
    public static function weekDaysAbbr($required = FALSE) {
        $weekdays = [
            t('Sun', [], ['context' => 'Abbreviated weekday']),
            t('Mon', [], ['context' => 'Abbreviated weekday']),
            t('Tue', [], ['context' => 'Abbreviated weekday']),
            t('Wed', [], ['context' => 'Abbreviated weekday']),
            t('Thu', [], ['context' => 'Abbreviated weekday']),
            t('Fri', [], ['context' => 'Abbreviated weekday']),
            t('Sat', [], ['context' => 'Abbreviated weekday']),
        ];
        $none = ['' => ''];
        return !$required ? $none + $weekdays : $weekdays;
    }

    /**
     * Constructs a translated array of 2-letter week day abbreviations.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of week day 2 letter abbreviations
     */
    public static function weekDaysAbbr2($required = FALSE) {
        $weekdays = [
            t('Su', [], ['context' => 'Abbreviated weekday']),
            t('Mo', [], ['context' => 'Abbreviated weekday']),
            t('Tu', [], ['context' => 'Abbreviated weekday']),
            t('We', [], ['context' => 'Abbreviated weekday']),
            t('Th', [], ['context' => 'Abbreviated weekday']),
            t('Fr', [], ['context' => 'Abbreviated weekday']),
            t('Sa', [], ['context' => 'Abbreviated weekday']),
        ];
        $none = ['' => ''];
        return !$required ? $none + $weekdays : $weekdays;
    }

    /**
     * Constructs a translated array of 1-letter week day abbreviations.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of week day 1 letter abbreviations
     */
    public static function weekDaysAbbr1($required = FALSE) {
        $weekdays = [
            t('S', [], ['context' => 'Abbreviated 1 letter weekday Sunday']),
            t('M', [], ['context' => 'Abbreviated 1 letter weekday Monday']),
            t('T', [], ['context' => 'Abbreviated 1 letter weekday Tuesday']),
            t('W', [], ['context' => 'Abbreviated 1 letter weekday Wednesday']),
            t('T', [], ['context' => 'Abbreviated 1 letter weekday Thursday']),
            t('F', [], ['context' => 'Abbreviated 1 letter weekday Friday']),
            t('S', [], ['context' => 'Abbreviated 1 letter weekday Saturday']),
        ];
        $none = ['' => ''];
        return !$required ? $none + $weekdays : $weekdays;
    }

    /**
     * Reorders weekdays to match the first day of the week.
     *
     * @param array $weekdays
     *   An array of weekdays.
     *
     * @return array
     *   An array of weekdays reordered to match the first day of the week. The
     *   keys will remain unchanged. For example, if the first day of the week is
     *   set to be Monday, the array keys will be [1, 2, 3, 4, 5, 6, 0].
     */
    public static function weekDaysOrdered($weekdays) {
        $first_day = \Drupal::config('system.date')->get('first_day');
        if ($first_day > 0) {
            for ($i = 1; $i <= $first_day; $i++) {
                // Reset the array to the first element.
                reset($weekdays);
                // Retrieve the first week day value.
                $last = current($weekdays);
                // Store the corresponding key.
                $key = key($weekdays);
                // Remove this week day from the beginning of the array.
                unset($weekdays[$key]);
                // Add this week day to the end of the array.
                $weekdays[$key] = $last;
            }
        }
        return $weekdays;
    }

    /**
     * Constructs an array of years in a specified range.
     *
     * @param int $min
     *   (optional) The minimum year in the array. Defaults to zero.
     * @param int $max
     *   (optional) The maximum year in the array. Defaults to zero.
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of years in the selected range.
     */
    public static function years($min = 0, $max = 0, $required = FALSE) {
        // Ensure $min and $max are valid values.
        if (empty($min)) {
            $min = intval(date('Y', REQUEST_TIME) - 3);
        }
        if (empty($max)) {
            $max = intval(date('Y', REQUEST_TIME) + 3);
        }
        $none = ['' => ''];
        $range = range($min, $max);
        $range = array_combine($range, $range);
        return !$required ? $none + $range : $range;
    }

    /**
     * Constructs an array of days in a month.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     * @param int $month
     *   (optional) The month in which to find the number of days. Defaults to
     *   NULL.
     * @param int $year
     *   (optional) The year in which to find the number of days. Defaults to
     *   NULL.
     *
     * @return array
     *   An array of days for the selected month.
     */
    public static function days($required = FALSE, $month = NULL, $year = NULL) {
        // If we have a month and year, find the right last day of the month.
        if (!empty($month) && !empty($year)) {
            $date = new DrupalDateTime($year . '-' . $month . '-01 00:00:00', 'UTC');
            $max = $date->format('t');
        }
        // If there is no month and year given, default to 31.
        if (empty($max)) {
            $max = 31;
        }
        $none = ['' => ''];
        $range = range(1, $max);
        $range = array_combine($range, $range);
        return !$required ? $none + $range : $range;
    }


    /**
     * Constructs an array of hours.
     *
     * @param string $format
     *   (optional) A date format string that indicates the format to use for the
     *   hours. Defaults to 'H'.
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of hours in the selected format.
     */
    public static function hours($format = 'H', $required = FALSE) {
        $hours = [];
        if ($format == 'h' || $format == 'g') {
            $min = 1;
            $max = 12;
        }
        else {
            $min = 0;
            $max = 23;
        }
        for ($i = $min; $i <= $max; $i++) {
            $formatted = ($format == 'H' || $format == 'h') ? DrupalDateTime::datePad($i) : $i;
            $hours[$i] = $formatted;
        }
        $none = ['' => ''];
        return !$required ? $none + $hours : $hours;
    }

    /**
     * Constructs an array of minutes.
     *
     * @param string $format
     *   (optional) A date format string that indicates the format to use for the
     *    minutes. Defaults to 'i'.
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     * @param int $increment
     *   An integer value to increment the values. Defaults to 1.
     *
     * @return array
     *   An array of minutes in the selected format.
     */
    public static function minutes($format = 'i', $required = FALSE, $increment = 1) {
        $minutes = [];
        // Ensure $increment has a value so we don't loop endlessly.
        if (empty($increment)) {
            $increment = 1;
        }
        for ($i = 0; $i < 60; $i += $increment) {
            $formatted = $format == 'i' ? DrupalDateTime::datePad($i) : $i;
            $minutes[$i] = $formatted;
        }
        $none = ['' => ''];
        return !$required ? $none + $minutes : $minutes;
    }

    /**
     * Constructs an array of seconds.
     *
     * @param string $format
     *   (optional) A date format string that indicates the format to use for the
     *   seconds. Defaults to 's'.
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     * @param int $increment
     *   An integer value to increment the values. Defaults to 1.
     *
     * @return array
     *   An array of seconds in the selected format.
     */
    public static function seconds($format = 's', $required = FALSE, $increment = 1) {
        $seconds = [];
        // Ensure $increment has a value so we don't loop endlessly.
        if (empty($increment)) {
            $increment = 1;
        }
        for ($i = 0; $i < 60; $i += $increment) {
            $formatted = $format == 's' ? DrupalDateTime::datePad($i) : $i;
            $seconds[$i] = $formatted;
        }
        $none = ['' => ''];
        return !$required ? $none + $seconds : $seconds;
    }

    /**
     * Constructs an array of AM and PM options.
     *
     * @param bool $required
     *   (optional) If FALSE, the returned array will include a blank value.
     *   Defaults to FALSE.
     *
     * @return array
     *   An array of AM and PM options.
     */
    public static function ampm($required = FALSE) {
        $none = ['' => ''];
        $ampm = [
            'am' => t('am', [], ['context' => 'ampm']),
            'pm' => t('pm', [], ['context' => 'ampm']),
        ];
        return !$required ? $none + $ampm : $ampm;
    }

    /**
     * Identifies the number of days in a month for a date.
     *
     * @param mixed $date
     *   (optional) A DrupalDateTime object or a date string.
     *   Defaults to NULL, which means to use the current date.
     *
     * @return int
     *   The number of days in the month.
     */
    public static function daysInMonth($date = NULL) {
        if (!$date instanceof DrupalDateTime) {
            $date = new DrupalDateTime($date);
        }
        if (!$date->hasErrors()) {
            return $date->format('t');
        }
        return NULL;
    }

    /**
     * Identifies the number of days in a year for a date.
     *
     * @param mixed $date
     *   (optional) A DrupalDateTime object or a date string.
     *   Defaults to NULL, which means to use the current date.
     *
     * @return int
     *   The number of days in the year.
     */
    public static function daysInYear($date = NULL) {
        if (!$date instanceof DrupalDateTime) {
            $date = new DrupalDateTime($date);
        }
        if (!$date->hasErrors()) {
            if ($date->format('L')) {
                return 366;
            }
            else {
                return 365;
            }
        }
        return NULL;
    }

    /**
     * Returns day of week for a given date (0 = Sunday).
     *
     * @param mixed $date
     *   (optional) A DrupalDateTime object or a date string.
     *   Defaults to NULL, which means use the current date.
     *
     * @return int
     *   The number of the day in the week.
     */
    public static function dayOfWeek($date = NULL) {
        if (!$date instanceof DrupalDateTime) {
            $date = new DrupalDateTime($date);
        }
        if (!$date->hasErrors()) {
            return $date->format('w');
        }
        return NULL;
    }

    /**
     * Returns translated name of the day of week for a given date.
     *
     * @param mixed $date
     *   (optional) A DrupalDateTime object or a date string.
     *   Defaults to NULL, which means use the current date.
     * @param string $abbr
     *   (optional) Whether to return the abbreviated name for that day.
     *   Defaults to TRUE.
     *
     * @return string
     *   The name of the day in the week for that date.
     */
    public static function dayOfWeekName($date = NULL, $abbr = TRUE) {
        if (!$date instanceof DrupalDateTime) {
            $date = new DrupalDateTime($date);
        }
        $dow = self::dayOfWeek($date);
        $days = $abbr ? self::weekDaysAbbr() : self::weekDays();
        return $days[$dow];
    }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc