5

How to set default date to Persian date in PHP?

Say, if I echo this function date('Y-m-d') then it will show 2018-03-05 but I want 1396-12-14 the Persian date

helvete
  • 2,455
  • 13
  • 33
  • 37

2 Answers2

15

Please check: http://php.net/manual/en/intldateformatter.create.php

<?php

// date_default_timezone_set('Asia/Tehran');

$now = new DateTime();

$formatter = new IntlDateFormatter(
                "fa_IR@calendar=persian", 
                IntlDateFormatter::FULL, 
                    IntlDateFormatter::FULL, 
                'Asia/Tehran', 
                IntlDateFormatter::TRADITIONAL, 
                "yyyy-MM-dd");

// It is now: 1396-12-14
echo 'It is now: ' . convert_to_number($formatter->format($now)) ."<br />"; 

// It is now: ۱۳۹۶-۱۲-۱۴
echo 'It is now: ' . $formatter->format($now) ."<br />"; 


// convert to number
function convert_to_number($string) {
    $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١','٠'];

    $num = range(0, 9);
    $convertedPersianNums = str_replace($persian, $num, $string);
    $englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums);

    return $englishNumbersOnly;
}
B.Kocaman
  • 800
  • 4
  • 13
1

Finglish (Persian) date format in php :

<?php

// date_default_timezone_set('Asia/Tehran');

$now = new DateTime();

$formatter = new IntlDateFormatter(
                "en_US@calendar=persian", 
                IntlDateFormatter::FULL, 
                    IntlDateFormatter::FULL, 
                'Asia/Tehran', 
                IntlDateFormatter::TRADITIONAL, 
                "yyyy-MMMM-dd");

// It is now: 1401-Bahman-20
echo 'It is now: ' . $formatter->format($now) ."<br />"; 
?>

And If you want to change the date format, see the following link :

https://unicode-org.github.io/icu/userguide/format_parse/datetime/#date-field-symbol-table