これは、日付を取得するために使用するコードです (スペイン語):
$fecha = strftime("%d de %B, %Y, a las %l:%M %p");
そして私は得る:
27 de julio, 2011, a las 7:10
質問は、私の PM (または AM) はどこですか?
私のアプリケーションは Linux で実行されています。
で別の値を使用してみることができます。setlocale()
私es_MX
には機能しませんが、仕事をするためです。とes_CO
をサポートしています。サーバーの構成に依存します:v%p
%P
可能な値のリスト
あなたはOSXを使っていますか?サポートされている場合、%p
または%P
サポートされていない場合
シンプルで醜い
$date="2016-11-15 12:34";
$fecha=strftime("%A, %d de %B de %Y %l:%M", strtotime("$date")).date(' a', strtotime("$date"));
結果: martes、2016 年 11 月 15 日 12:34 午後
@iyepes のおかげで、サイトが複数の言語である場合、ロケールを完全にバイパスすることにしました。%P または %p は、英語以外のロケールではどちらも価値がないと思います。少なくともスペイン語の場合はそうです。
%P または %p をロケールから分離します。while ループがある場合は、ロケールを en_US に設定し、%P を含む en_US strftime で時刻を抽出してから、ユーザーが定義したロケールに戻します。
$day1 = strtotime($row["day1"]);
$day2 = strtotime($row["day2"]);
$day3 = strtotime($row["day3"]);
setlocale(LC_ALL, "en_US");
$time1 = strftime("%l:%M %P", $day1);
$time2 = strftime("%l:%M %P", $day2);
$time3 = strftime("%l:%M %P", $day3);
setlocale(LC_ALL, $defined_locale);
$day1 - strftime("%d de %B, %Y, " $day1).$time1;
$day2 - strftime("%d de %B, %Y, " $day2).$time2;
etc...
私の解決策
function mystrftime($format, $time=null){
if(!$time) $time = time();
preg_match_all('/%[a-zA-Z]/', $format, $placeholders);
foreach ($placeholders[0] as $placeholder){
if(strftime($placeholder, $time)==''){
$format = str_replace($placeholder, '%'.$placeholder, $format);
}
}
$format = strftime($format, $time);
preg_match_all('/%[a-zA-Z]/', $format, $placeholders);
$locale = setlocale('LC_TIME', '0');
setlocale('LC_TIME', 'en_US.UTF8');
foreach ($placeholders[0] as $placeholder){
$format = str_replace($placeholder, strftime($placeholder, $time), $format);
}
setlocale('LC_TIME', $locale);
return $format;
}