以阿拉伯语显示日期


Display dates in Arabic

这是我的代码:

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

输出:

25 Sep, 2011

为什么它不显示阿拉伯日期?我是否错误地使用了 strftime?

在这里你可以打印阿拉伯语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

希望有帮助。

这个怎么样:

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 时间戳。

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

更新:如果 PHP 5.3 不适合您,您也可以按照此问题中的建议尝试Zend_Date。

灵感来自Amr SubZero上面的答案:

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

日期:

函数.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>

时间:

函数.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>

如果您正在寻找的只是打印今天是什么日子,那么您的问题很简单......

试试这个函数。

<?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] vars 中的索引。最后,将您的阿拉伯日期格式化到您的心满意足!

看看这里的 PHP date(( 函数

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

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

你跑了吗

locale -a

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

如果我能提供帮助,我会使用这个 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>
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);
?>

这应该有效:

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

如果日期仍然没有以阿拉伯语显示,那么系统上可能没有安装阿拉伯语区域设置,要检查它,请使用终端连接并键入:locale -a,它将显示已安装的区域设置,如果未列出阿拉伯语,您必须先安装它,然后它应该可以工作。

  /**
   * 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);
  }
<?php
$date = '21 Dec 22  14:13';
$date_time = new DateTime($date);
$formatter = new IntlDateFormatter('ar_DZ',);
print $formatter->format($date_time);

有关更多参考,请参阅此链接。

这对你有用吗:

设置区域设置(LC_ALL,'ar'(;echo strftime('%A %d %B %Y'(;

希望对你有帮助