/** * The format of the outputted date string (jalali equivalent of php date() function) * @global array $jdate_month_name * @global array $ztjalali_option * @param string $format for example 'Y-m-d H:i:s' * @param timestamp $timestamp [optional] * @param bool $timezone [optional] * @param bool $fanum [optional]<br/>convert number to persian ?<br/> * default : get from plugin option * @return string * @since 5.0.0 */ function jdate($format, $timestamp = NULL, $timezone = false, $fanum = NULL) { global $jdate_month_name, $ztjalali_option; static $jdate_month_days = array(0, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29); static $jdate_week_name = array('شنبه', 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنج شنبه', 'جمعه'); if (!$timestamp) { $timestamp = time(); } elseif (!is_numeric($timestamp)) { $timestamp = strtotime($timestamp); } elseif (!is_integer($timestamp)) { $timestamp = intval($timestamp); } /* =================================================================== */ if ($timezone === 'local' or $timezone === FALSE) { //do noting } elseif ($timezone === TRUE) { $fanum = FALSE; // support jdate older version } elseif ($timezone === 'current') { $time_zone = 'Asia/Tehran'; function_exists('get_option') and $time_zone = get_option('timezone_string'); $dtz = new DateTimeZone($time_zone); $time_obj = new DateTime('now', $dtz); $deff_time = $dtz->getOffset($time_obj); $timestamp += $deff_time; } elseif (is_numeric($time_zone)) { $timestamp += (int) $time_zone; } elseif (is_string($time_zone)) { $dtz = new DateTimeZone($time_zone); $time_obj = new DateTime('now', $dtz); $deff_time = $dtz->getOffset($time_obj); $timestamp += $deff_time; } /* =================================================================== */ if ($fanum === NULL and !empty($ztjalali_option['change_jdate_number_to_persian']) and $ztjalali_option['change_jdate_number_to_persian']) { $fanum = TRUE; } /* =================================================================== */ # Create need date parametrs list($gYear, $gMonth, $gDay, $gWeek) = explode('-', date('Y-m-d-w', $timestamp)); list($pYear, $pMonth, $pDay) = gregorian_to_jalali($gYear, $gMonth, $gDay); $pWeek = $gWeek + 1; if ($pWeek >= 7) { $pWeek = 0; } if ($format == '\\') { $format = '//'; } $lenghFormat = strlen($format); $i = 0; $result = ''; while ($i < $lenghFormat) { $par = $format[$i]; if ($par == '\\') { $result .= $format[++$i]; $i++; continue; } switch ($par) { # Day case 'd': $result .= $pDay < 10 ? '0' . $pDay : $pDay; break; case 'D': $result .= substr($jdate_week_name[$pWeek], 0, 2); break; case 'j': $result .= $pDay; break; case 'l': $result .= $jdate_week_name[$pWeek]; break; case 'N': $result .= $pWeek + 1; break; case 'w': $result .= $pWeek; break; case 'z': $result .= jday_of_year($pMonth, $pDay); break; case 'S': $result .= 'ام'; break; # Week # Week case 'W': $result .= ceil(jday_of_year($pMonth, $pDay) / 7); break; # Month # Month case 'F': $result .= $jdate_month_name[$pMonth]; break; case 'm': $result .= $pMonth < 10 ? '0' . $pMonth : $pMonth; break; case 'M': $result .= substr($jdate_month_name[$pMonth], 0, 6); break; case 'n': $result .= $pMonth; break; case 't': $result .= jday_of_month($pYear, $pMonth); break; # Years # Years case 'L': $result .= (int) is_jalali_leap_year($pYear); break; case 'Y': case 'o': $result .= $pYear; break; case 'y': $result .= substr($pYear, 2); break; # Time # Time case 'a': case 'A': if (date('a', $timestamp) == 'am') { $result .= $par == 'a' ? 'ق.ظ' : 'قبل از ظهر'; } else { $result .= $par == 'a' ? 'ب.ظ' : 'بعد از ظهر'; } break; case 'B': case 'g': case 'G': case 'h': case 'H': case 's': case 'u': case 'i': # Timezone # Timezone case 'e': case 'I': case 'O': case 'P': case 'T': case 'Z': $result .= date($par, $timestamp); break; # Full Date/Time # Full Date/Time case 'c': $result .= $pYear . '-' . $pMonth . '-' . $pDay . ' ' . date('H:i:s P', $timestamp); break; case 'r': $result .= substr($jdate_week_name[$pWeek], 0, 2) . '، ' . $pDay . ' ' . substr($jdate_month_name[$pMonth], 0, 6) . ' ' . $pYear . ' ' . date('H::i:s P', $timestamp); break; case 'U': $result .= $timestamp; break; default: $result .= $par; } $i++; } if ($fanum) { return ztjalali_persian_num($result); } return $result; }
/** * pre get posts filter handler * @param object $post * @see wp-includes\query.php 2353 */ function ztjalali_pre_get_posts_filter_fn($query) { global $wpdb; $query_vars = $query->query; $year = $monthnum = $day = ""; if (isset($query_vars['m']) and !empty($query_vars['m'])) { $year = (int) substr($query_vars['m'], 0, 4); if ($year < 1700) { $monthnum = (int) substr($query_vars['m'], 4, 2); if (empty($monthnum)) { $start_date = jalali_to_gregorian($year, 1, 1); $end_date = jalali_to_gregorian($year, 12, jday_of_month($year, 12)); } else { $day = (int) substr($query_vars['m'], 6, 2); if (empty($day)) { $start_date = jalali_to_gregorian($year, $monthnum, 1); $end_date = jalali_to_gregorian($year, $monthnum, jday_of_month($year, $monthnum)); } else { $end_date = $start_date = jalali_to_gregorian($year, $monthnum, $day); } } $date_query = array(array('after' => array('year' => $start_date[0], 'month' => $start_date[1], 'day' => $start_date[2]), 'before' => array('year' => $end_date[0], 'month' => $end_date[1], 'day' => $end_date[2]), 'inclusive' => TRUE)); $query->set('date_query', $date_query); $query->set('m', ''); } return $query; } /* ------------------------------------------------------ */ if (isset($query_vars['year'])) { $year = $query_vars['year']; } if (isset($query_vars['monthnum'])) { $monthnum = $query_vars['monthnum']; } if (isset($query_vars['day'])) { $day = $query_vars['day']; } if ($year > 1700) { return $query; } if (isset($query_vars['name'])) { $post_date = $wpdb->get_var($wpdb->prepare("select post_date from {$wpdb->posts} where post_name=%s order by ID", $query_vars['name'])); $Date = explode('-', date('Y-m-d', strtotime($post_date))); $jDate = gregorian_to_jalali($Date[0], $Date[1], $Date[2]); if ($year == $jDate[0]) { $query->set('year', $Date[0]); } if ($monthnum == $jDate[1]) { $query->set('monthnum', $Date[1]); } if ($day == $jDate[2]) { $query->set('day', $Date[2]); } return $query; } if (isset($query_vars['post_id'])) { $post_date = $wpdb->get_var($wpdb->prepare("select post_date from {$wpdb->posts} where ID=%d", $query_vars['post_id'])); $cDate = getdate(strtotime($post_date)); if (!empty($year)) { $query->set('year', $cDate['year']); } if (!empty($monthnum)) { $query->set('monthnum', $cDate['mon']); } if (!empty($day)) { $query->set('day', $cDate['mday']); } return $query; } if (!empty($year) and !empty($monthnum) and !empty($day)) { $post_date = jalali_to_gregorian($year, $monthnum, $day); $query->set('year', $post_date[0]); $query->set('monthnum', $post_date[1]); $query->set('day', $post_date[2]); return $query; } if (!empty($year) and !empty($monthnum)) { $start_date = jalali_to_gregorian($year, $monthnum, 1); $end_date = jalali_to_gregorian($year, $monthnum, jday_of_month($year, $monthnum)); $date_query = array(array('after' => array('year' => $start_date[0], 'month' => $start_date[1], 'day' => $start_date[2]), 'before' => array('year' => $end_date[0], 'month' => $end_date[1], 'day' => $end_date[2]), 'inclusive' => TRUE)); $query->set('date_query', $date_query); $query->set('year', ''); $query->set('monthnum', ''); // $post_date = jalali_to_gregorian($year, $monthnum, 15); // $query->set('year', $post_date[0]); // $query->set('monthnum', $post_date[1]); return $query; } if (!empty($year)) { $start_date = jalali_to_gregorian($year, 1, 1); if (is_jalali_leap_year($year)) { $end_date = jalali_to_gregorian($year, 12, 30); } else { $end_date = jalali_to_gregorian($year, 12, 29); } $date_query = array(array('after' => array('year' => $start_date[0], 'month' => $start_date[1], 'day' => $start_date[2]), 'before' => array('year' => $end_date[0], 'month' => $end_date[1], 'day' => $end_date[2]), 'inclusive' => TRUE)); $query->set('date_query', $date_query); $query->set('year', ''); return $query; } return $query; }