2015-10-03 19 views
3

對於某些區域設置,%p返回空字符串。在這種情況下,我寧願讓它返回上午或下午,即使這對於該語言來說不正確。使用php strftime我可以定義%p嗎?

用例是用戶可以選擇覆蓋默認值並指定他們需要12小時時間的事件日曆。如果在課程開始時,我可以檢測%p是否返回本地化字符串或爲空,並在空白時將其定義爲AM或PM,這會使代碼變得更容易。

- 編輯 -

<?php 
setlocale(LC_TIME, 'ru_RU.UTF8'); 
print(strftime('%l:%M %p %Z', time())); 
?> 

在許多地方,如ru_RU%p返回一個無用的空字符串。 AM或PM的翻譯未定義時,我想將其定義爲AM或PM。就像我的問題在指定編輯之前。

+0

您可以提供您提供您的代碼爲[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve) ? – manetsus

+0

該評論界面糟透了,打回來換另一行,然後提交。我將在一秒內添加它 –

+0

$ start = strftime($ dformat,$ node-> start); $ search = array('/^12:00'。$ this-> AM。'/','/^00:00 $ /','/^12:00'。$ this-> PM。'/ ','/^12:00 $ /'); $ this-> getString('Midnight'),'00:00'。$ this-> getString('Midnight'),'12:00'。$ this-> getString('Midnight'),'00:00'$ replace = array('12:00'。 getString('Noon'),'12:00'。$ this-> getString('Noon')); $ start = preg_replace($ search,$ replace,$ start); $ event-> setAttribute('start',$ start); $ dformat可以是幾件事情,其中​​一些包括%p和$ this-> getstring國際化午夜和中午。 –

回答

2

浮現在腦海,這可能更多的是創可貼的解決方案,但在$dformat檢查%p

EDITED溶液中的第一件事

如果有格式化我的各種形式雲集了評論,而不是也許是最好的,如果%p呈現一個空字符串實際上插自己的%p因此該方案可能會爲你工作:

$check_for_empty_string = false; 
if (preg_match("@%[email protected]", $dformat)) { 
    if (strftime('%p', $node->start) == '') { 
     // get 24 hours 
     $hour = strtotime('%H', $start); 
     if ($hour >= 12) { 
      // it's PM 
      $dformat = preg_replace("@%[email protected]", $this->PM, $dformat); 
     } else { 
      $dformat = preg_replace("@%[email protected]", $this->AM, $dformat); 
     } 
    } 
} 

$start = strftime($dformat, $node->start); 

$search = array(
    '/^12:00 ' . $this->AM . '/', 
    '/^00:00$/', '/^12:00 ' . $this->PM . '/', 
    '/^12:00$/' 
); 
$replace = array(
    '12:00 ' . $this->getString('Midnight'), 
    '00:00 ' . $this->getString('Midnight'), 
    '12:00 ' . $this->getString('Noon'), 
    '12:00 ' . $this->getString('Noon') 
); 
$start = preg_replace($search, $replace, $start); 
$event->setAttribute('start', $start); 
+0

我有我自己的bandaid工作,我希望有一種方法來定義%p在未定義的情況下。你的bandaid雖然比我的好,我的參與分裂命令和兩次調用strftime在%p的任一側。 –

2
private function TwelveHourHack($dformat, $ts) { 
    if($this->safeTwelve) { 
    return strftime($dformat, $ts); 
    } 
    $dformat = preg_replace('/%p/', date('A', $ts), $dformat); 
    return strftime($dformat, $ts); 
} 

這就是我最終做的。 $這個 - > safeTwelve是布爾在集合類開始通過看

strlen(strftime('%p', $now)) 
+0

很酷,最好把它放在一個私人函數中,以保持代碼清潔,無論如何,這就是我會做的。 – DataHerder

相關問題