I have designed a template for my site and I want all WordPress and WooCommerce dates in my template to be converted from Gregorian to Solar.
I use the following shortcode to display the publication date of my posts:
<?php the_time('Y/m/d'); ?>
But the date it shows me is Gregorian and I want it to be changed to Shamsi.
I know there are many plugins for this, but I want to put some code in my template so that my default template becomes solar date forever.
I need any kind of help that can get me to this feature.
Thank you very much.
Edit:
I have tried all these codes before but none of them changed the date of WordPress for me.
I am looking for a code that by placing it in the functions.php
file, will convert all WordPress dates or at least the dates that are displayed in my template to solar.
Edit 2:
I used the moment.js library in my template and also used the javascript method but still it didn't work.
How to change Gregorian date to Persian date in JavaScript?
Convert gregorian date to persian(jalali) date in angular 2 and Ionic 2
I think first you use get_the_time function to get date then convert it to shamsi date and echo it to display. code like below work. you can add any other g2p function you want.
add_filter('the_time', 'change_date_format');
function change_date_format(){
//change date language here
$date = get_the_time('Y/m/d');
$date = explode('/', $date);
$farsi_date = g2p($date[0],$date[1],$date[2]);
return $farsi_date[0].'/'.$farsi_date[1].'/'.$farsi_date[2];
}
function g2p($g_y, $g_m, $g_d)
{
$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
$gy = $g_y-1600;
$gm = $g_m-1;
$gd = $g_d-1;
$g_day_no = 365*$gy+floor(($gy+3)/4)-floor(($gy+99)/100)+floor(($gy+399)/400);
for ($i=0; $i < $gm; ++$i){
$g_day_no += $g_days_in_month[$i];
}
if ($gm>1 && (($gy%4==0 && $gy%100!=0) || ($gy%400==0))){
/* leap and after Feb */
++$g_day_no;
}
$g_day_no += $gd;
$j_day_no = $g_day_no-79;
$j_np = floor($j_day_no/12053);
$j_day_no %= 12053;
$jy = 979+33*$j_np+4*floor($j_day_no/1461);
$j_day_no %= 1461;
if ($j_day_no >= 366) {
$jy += floor(($j_day_no-1)/365);
$j_day_no = ($j_day_no-1)%365;
}
$j_all_days = $j_day_no+1;
for ($i = 0; $i < 11 && $j_day_no >= $j_days_in_month[$i]; ++$i) {
$j_day_no -= $j_days_in_month[$i];
}
$jm = $i+1;
$jd = $j_day_no+1;
return array($jy, $jm, $jd, $j_all_days);
}