使用php strftime可以定义%p吗?

使用php strftime可以定义%p吗?,php,strftime,Php,Strftime,对于某些区域设置,%p返回一个空字符串。在这些情况下,我更愿意让它返回AM或PM,即使这对语言不正确 用例是事件日历,用户可以选择覆盖默认值并指定他们想要的12小时时间。如果在类的开头,我可以检测%p是否返回本地化字符串或空字符串,并在空字符串时将其定义为AM或PM,那么代码将变得容易得多 --编辑-- 在许多地区,例如ru_ru,%p返回一个无用的空字符串。如果没有定义AM或PM的翻译,我想将其定义为AM或PM。就像我在指定编辑之前的问题一样。首先想到的是,这可能更像是一个绷带解决方案,但

对于某些区域设置,
%p
返回一个空字符串。在这些情况下,我更愿意让它返回AM或PM,即使这对语言不正确

用例是事件日历,用户可以选择覆盖默认值并指定他们想要的12小时时间。如果在类的开头,我可以检测
%p
是否返回本地化字符串或空字符串,并在空字符串时将其定义为AM或PM,那么代码将变得容易得多

--编辑--



在许多地区,例如
ru_ru
%p
返回一个无用的空字符串。如果没有定义AM或PM的翻译,我想将其定义为AM或PM。就像我在指定编辑之前的问题一样。

首先想到的是,这可能更像是一个绷带解决方案,但是要签入
$dformat
以查看
%p

已编辑的解决方案

如果有我在评论中收集到的各种格式,那么如果%p呈现空字符串,那么最好实际插入您自己的%p,这样这个解决方案可能适合您:

$check_for_empty_string = false;
if (preg_match("@%p@", $dformat)) {
    if (strftime('%p', $node->start) == '') {
        // get 24 hours
        $hour = strtotime('%H', $start);
        if ($hour >= 12) {
            // it's PM
            $dformat = preg_replace("@%p@", $this->PM, $dformat);
        } else {
            $dformat = preg_replace("@%p@", $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);
这就是我最终要做的$这个->安全12是在类初始化时通过查看

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

你能提供你的代码作为吗?该死的评论界面很烂,点击返回另一行,它就提交了。我将在秒$start=strftime($dformat,$node->start)中添加它$搜索=数组(“/^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)$事件->设置属性('start',$start)$数据格式可以是多种形式,其中一些包括%p和$this->getstring国际化午夜和中午。显然,注释中的小标记不理解4空格表示代码。将问题添加为编辑,不要在注释中发布代码!我有自己的绷带可以使用,我希望有一种方法可以在没有定义的情况下定义%p。虽然您的bandaid比我的要好,但我的bandaid在%p的任一侧包含一个分割命令和两个对strftime的调用。很酷,可能最好将它放在一个私有函数中,以保持代码更干净,无论如何,我都会这么做。
private function TwelveHourHack($dformat, $ts) {
  if($this->safeTwelve) {
    return strftime($dformat, $ts);
  }
  $dformat = preg_replace('/%p/', date('A', $ts), $dformat);
  return strftime($dformat, $ts);
}
strlen(strftime('%p', $now))