用阿拉伯语显示日期

时间:2011-11-17 12:13:58

标签: php date arabic

这是我的代码:

setlocale( LC_ALL,'ar' ); 
echo strftime( '%e %b, %Y', strtotime( '2011-10-25' ));

输出:

25 Sep, 2011

为什么不显示阿拉伯语日期?我是否正确使用strftime?

11 个答案:

答案 0 :(得分:23)

在这里您可以打印阿拉伯语PHP日期:

创建一个名为arabicdate.php的文件并将此函数放入其中:

function ArabicDate() {
    $months = array("Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل", "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس", "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر");
    $your_date = date('y-m-d'); // The Current Date
    $en_month = date("M", strtotime($your_date));
    foreach ($months as $en => $ar) {
        if ($en == $en_month) { $ar_month = $ar; }
    }

    $find = array ("Sat", "Sun", "Mon", "Tue", "Wed" , "Thu", "Fri");
    $replace = array ("السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة");
    $ar_day_format = date('D'); // The Current Day
    $ar_day = str_replace($find, $replace, $ar_day_format);

    header('Content-Type: text/html; charset=utf-8');
    $standard = array("0","1","2","3","4","5","6","7","8","9");
    $eastern_arabic_symbols = array("٠","١","٢","٣","٤","٥","٦","٧","٨","٩");
    $current_date = $ar_day.' '.date('d').' / '.$ar_month.' / '.date('Y');
    $arabic_date = str_replace($standard , $eastern_arabic_symbols , $current_date);

    return $arabic_date;
}

现在将此文件包含在您的页面中:

include 'arabicdate.php';

然后您可以打印阿拉伯语PHP日期:

echo ArabicDate();

实时格式化示例:

http://ideone.com/MC0hou

希望有所帮助。

答案 1 :(得分:4)

AFAIK setlocale实际上不会为您进行任何语言翻译,而是会影响格式化和比较器功能。如果您想要本地化,那么您可以尝试使用IntlDateFormatter,这可能会为您提供所需的内容。

更新:如果PHP 5.3不适合您,您也可以按Zend_Date中的建议尝试this question

答案 2 :(得分:4)

这个怎么样:

function arabicDate($time)
{
    $months = ["Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل", "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس", "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر"];
    $days = ["Sat" => "السبت", "Sun" => "الأحد", "Mon" => "الإثنين", "Tue" => "الثلاثاء", "Wed" => "الأربعاء", "Thu" => "الخميس", "Fri" => "الجمعة"];
    $am_pm = ['AM' => 'صباحاً', 'PM' => 'مساءً'];

    $day = $days[date('D', $time)];
    $month = $months[date('M', $time)];
    $am_pm = $am_pm[date('A', $time)];
    $date = $day . ' ' . date('d', $time) . ' - ' . $month . ' - ' . date('Y', $time) . '   ' . date('h:i', $time) . ' ' . $am_pm;
    $numbers_ar = ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"];
    $numbers_en = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];

    return str_replace($numbers_en, $numbers_ar, $date);
}

注意:参数($ time)应为Unix时间戳。

答案 3 :(得分:1)

Amr SubZero answer以上的启发:

如果有其他人需要这个,这两个函数显示一个wordpress网站的阿拉伯语发布日期和时间:

<强>日期:

<强>的functions.php

function single_post_arabic_date($postdate_d,$postdate_d2,$postdate_m,$postdate_y) {
    $months = array("Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل", "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس", "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر");
    $en_month = $postdate_m;
    foreach ($months as $en => $ar) {
        if ($en == $en_month) { $ar_month = $ar; }
    }

    $find = array ("Sat", "Sun", "Mon", "Tue", "Wed" , "Thu", "Fri");
    $replace = array ("السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة");
    $ar_day_format = $postdate_d2;
    $ar_day = str_replace($find, $replace, $ar_day_format);

    header('Content-Type: text/html; charset=utf-8');
    $standard = array("0","1","2","3","4","5","6","7","8","9");
    $eastern_arabic_symbols = array("٠","١","٢","٣","٤","٥","٦","٧","٨","٩");
    $post_date = $ar_day.' '.$postdate_d.' '.$ar_month.' '.$postdate_y;
    $arabic_date = str_replace($standard , $eastern_arabic_symbols , $post_date);

    return $arabic_date;
}

循环内部:

<date>
<?php
  $postdate_d = get_the_date('d');
  $postdate_d2 = get_the_date('D');
  $postdate_m = get_the_date('M');
  $postdate_y = get_the_date('Y');                                

 echo single_post_arabic_date($postdate_d,$postdate_d2, $postdate_m, $postdate_y);
?>
</date>

<强> TIME:

<强>的functions.php

function single_post_arabic_time($posttime_h, $posttime_i, $posttime_a) {

    $ampm = array("AM", "PM");
    $ampmreplace = array("ق.ظ", "ب.ظ");
    $ar_ampm = str_replace($ampm, $ampmreplace, $posttime_a);

    header('Content-Type: text/html; charset=utf-8');
    $standardletters = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
    $eastern_arabic_letters = array("٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩");
    $post_time = $posttime_h . ':' . $posttime_i." ".$ar_ampm;
    $arabic_time = str_replace($standardletters, $eastern_arabic_letters, $post_time);

    return $arabic_time;
}

循环内部:

<span>الساعة </span>
<time>
<?php
  $posttime_h = get_the_date('h');
  $posttime_i = get_the_date('i');
  $posttime_s = get_the_date('d');
  $posttime_a = get_the_date('A');

echo single_post_arabic_time($posttime_h,$posttime_i,$posttime_a);
?>
</time>

答案 4 :(得分:1)

如果您只想打印今天是哪一天,那么您的问题很简单...

试试这个功能。

<?php

function arDate(){
    $MONTHS =   array('كانون الثاني','شباط','آذار','نيسان','أيار','حزيران','تموز','آب','أيلول','تشرين الأول','تشرين الثاني','كانون الأول');
    $DAYS   =   array('الأحد','الاثنين','الثلاثاء','الأربعاء','الخميس','الجمعة','السبت');
    
    $dName      =   date("w");   // the number of the week-day ((from 0 to 6)). [0] for Sunday, [6] for Saturday //
    $dm         =   date("d");   // day of the month in numbers without leading zero; i.e.: 1, 2, 3... 28, 29, 30 //
    $mnth       =   date("n")-1; // number of the month ((from 1 to 12)) this is why we minus 1 from it so that it align with our $MONTHS array.;
    $yr         =   date('Y');   // four-digit year; eg.: 1981 //
    
    return $DAYS[$dName] . " " . $dm . " / " . $MONTHS[$mnth] . " / " . $yr;
}

$today = arDate();
echo $today; // الأحد 01 / آب / 2021 

?>

解释: 我们首先准备两个包含日期和月份的阿拉伯名称的数组。然后我们使用 PHP 内置函数 date() 得到四个变量。这个函数有很多参数来控制它的返回。我在这里使用可以为我提供数字的参数,以便我将它们用作 $MONTHS[bla bla bla] 和 $DAYS[bla bla bla] 变量中的索引。最后,将您的阿拉伯日期格式化为您的心内容!

have a look at PHP date() function in here

注意 1: 请注意,您可以调整日期和月份的安排,这样您就不需要像我上面所做的那样从变量 (-1) 中减去一个。参考 W3S 的链接,您将了解如何组织您的阿拉伯名称 ARRAYS。

注意 2: 另外,请注意,我在我的函数中使用了古典阿拉伯语名称,这些名称仅在叙利亚使用;尽管它们是阿拉伯语中月份的经典名称,但它们在其他阿拉伯联盟国家中并不那么出名。

答案 5 :(得分:0)

你跑吗

locale -a

并验证您的系统有一个名为“ar”的语言环境?它可能被称为更具体的东西,例如“ar_AR.utf8”...如果您需要支持在多个系统中拼写不同的阿拉伯语语言环境,您可以将数组传递给setlocale()。将使用系统支持的该阵列中的第一个区域设置名称。

答案 6 :(得分:0)

如果我能提供帮助,我会使用这个javascript函数:

<script type='text/javascript'>

navig = navigator.appName;

versn = parseInt(navigator.appVersion);

if ( (navig == "Netscape" && versn >= 3) || (navig == "Microsoft     Internet Explorer" && versn >= 4)) 
info = "true";

else info = "false";

function Ar_Date() {

   if (info == "true") {

    var info3 = new Date();
    var info4=info3.getDay();
    var info5=info3.getMonth();
    var info6=info3.getDate();
    var info7=info3.getFullYear();
    var info8 = new Array('&#1604;&#1571;&#1581;&#1583;','&#1575;&#1604;&#1573;&#1579;&#1606;&#1610;&#1606;','&#1575;&#1604;&#1579;&#1604;&#1575;&#1579;&#1575;&#1569;','&#1575;&#1604;&#1571;&#1585;&#1576;&#1593;&#1575;&#1569;','&#1575;&#1604;&#1582;&#1605;&#1610;&#1587;','&#1575;&#1604;&#1580;&#1605;&#1593;&#1577;','&#1575;&#1604;&#1587;&#1576;&#1578;');
    var info9 = info8[info4];
    var info10 = new Array('&#1580;&#1575;&#1606;&#1601;&#1610;','&#1601;&#1610;&#1601;&#1585;&#1610;','&#1605;&#1575;&#1585;&#1587;','&#1571;&#1601;&#1585;&#1610;&#1604;','&#1605;&#1575;&#1610;','&#1580;&#1608;&#1575;&#1606;','&#1580;&#1608;&#1610;&#1604;&#1610;&#1577;','&#1571;&#1608;&#1578;','&#1587;&#1576;&#1578;&#1605;&#1576;&#1585;','&#1571;&#1603;&#1578;&#1608;&#1576;&#1585;','&#1606;&#1608;&#1601;&#1605;&#1576;&#1585;','&#1583;&#1610;&#1587;&#1605;&#1576;&#1585;');
    var info11 = info10[info5];
    var info12=info9+'&#1548; '+info6+' '+info11+' '+info7;
    var info12=info9+'&#1548; '+info6+' '+info11;

    document.write(info12);

   }

}

</script>

答案 7 :(得分:0)

function single_post_arabic_date($postdate_d,$postdate_d2,$postdate_m,$postdate_y) {
    $months = array("01" => "يناير", "02" => "فبراير", "03" => "مارس", "04" => "أبريل", "05" => "مايو", "06" => "يونيو", "07" => "يوليو", "08" => "أغسطس", "09" => "سبتمبر", "10" => "أكتوبر", "11" => "نوفمبر", "12" => "ديسمبر");


       $ar_month =months[$postdate_m]; 


    $find = array ("Sat", "Sun", "Mon", "Tue", "Wed" , "Thu", "Fri");
    $replace = array ("السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة");
    $ar_day_format = $postdate_d2;
    $ar_day = str_replace($find, $replace, $ar_day_format);

    header('Content-Type: text/html; charset=utf-8');
    $standard = array("0","1","2","3","4","5","6","7","8","9");
    $eastern_arabic_symbols = array("٠","١","٢","٣","٤","٥","٦","٧","٨","٩");
    $post_date = $ar_day.' '.$postdate_d.' '.$ar_month.' '.$postdate_y;
    $arabic_date = str_replace($standard , $eastern_arabic_symbols , $post_date);

    return $arabic_date;
}

这只是改善功能

<?php
      $postdate_d = get_the_date('d'); 
     $postdate_d2 = get_the_date('D');
      $postdate_m = get_the_date('m');
      $postdate_y = get_the_date('Y');                                

     echo single_post_arabic_date($postdate_d,$postdate_d2, $postdate_m, $postdate_y);
?>

答案 8 :(得分:0)

这应该有效:

setLocale(LC_ALL , 'ar_EG.utf-8');

如果日期仍未以阿拉伯语显示,则系统上可能未安装阿拉伯语语言环境,要进行检查,请使用终端连接并键入:locale -a,如果未使用阿拉伯语,它将显示已安装的语言环境列出,则必须先安装它,然后它才能工作。

答案 9 :(得分:0)

  /**
   * Convert time string to arabic
   *@param string $time
   */
  public function arabicDate($time)
  {
      $en_data = ['January', 'Jan', 'Feburary', 'Feb', 'March', 'Mar',
      'April', 'Apr', 'May', 'June', 'Jun',
      'July', 'Jul', 'August', 'Aug', 'September', 'Sep',
      'October', 'Oct', 'November', 'Nov', 'December', 'Dec',
      'Satureday', 'Sat', 'Sunday', 'Sun', 'Monday', 'Mon',
      'Tuesday', 'Tue', 'Wednesday', 'Wed', 'Thursday', 'Thu', 'Friday', 'Fri',
      'AM', 'am', 'PM', 'pm'
      ];

      $ar_data = ['يناير', 'يناير', 'فبراير', 'فبراير', 'مارس', 'مارس',
      'أبريل', 'أبريل', 'مايو', 'مايو', 'يونيو', 'يونيو',
      'يوليو', 'يوليو', 'أغسطس', 'أغسطس', 'سبتمبر', 'سبتمبر',
      'أكتوبر', 'أكتوبر', 'نوفمبر', 'نوفمبر', 'ديسمبر', 'ديسمبر',
      'السبت', 'السبت', 'الأحد', 'الأحد', 'الإثنين', 'الإثنين',
      'الثلاثاء', 'الثلاثاء', 'الأربعاء', 'الأربعاء', 'الخميس', 'الخميس', 'الجمعة', 'الجمعة',
      'صباحاً', 'صباحاً', 'مساءً', 'مساءً'
      ];

      return str_replace($en_data, $ar_data, $time);
  }

答案 10 :(得分:-1)

这适合你吗?

setlocale(LC_ALL,'ar');
echo strftime('%A %d %B %Y'); 

希望有所帮助