【问题标题】:changing time format with preg replace in php在php中使用preg替换更改时间格式
【发布时间】:2011-01-20 08:34:58
【问题描述】:

我只是想知道我们是否可以使用 preg replace 来做到这一点

如果有时间就好了

1h 38 min

可以改成

98 mins

2h 20 min

可以改成

140 mins

或者只是建议我任何其他随机函数,这是更简单的方法

谢谢

【问题讨论】:

  • 您收到的格式如何,1381h 38min
  • 有时是 1 小时 38 分钟,有时是 2 小时 20 分钟,时间是 1 小时或 2 小时

标签: php regex replace pcre


【解决方案1】:
$str="1h 38 min";
$s = explode(" ",$str);
if ( strpos ( $s[0] ,"h" ) !==FALSE) {
    $hr=str_replace("h","",$s[0]);
    print ($hr*60) + $s[1]."\n";
}

【讨论】:

    【解决方案2】:
    $pattern = '!(\d+)\s*h\s*(\d+)\s*min!';
    foreach( array('1h 38 min', '2h 20 min') as $input) {
      echo preg_replace_callback($pattern, function($x) { return ($x[1]*60+$x[2]).' minutes'; }, $input), "\n";
    }
    

    打印

    98 minutes
    140 minutes
    

    对于 5.3 之前的 php 版本,您必须使用

    function foo($x) {
      return ($x[1]*60+$x[2]).' minutes';
    }
    $pattern = '!(\d+)\s*h\s*(\d+)\s*min!';
    foreach( array('1h 38 min', '2h 20 min') as $input) {
      echo preg_replace_callback($pattern, 'foo', $input), "\n";
    }
    

    【讨论】:

    • preg 替换给出错误解析错误:语法错误,意外的 T_FUNCTION
    【解决方案3】:

    这个简单的函数应该可以解决问题。但是,它不会对字符串格式进行验证。

    function reformat_time_string($timestr) {
        $vals = sscanf($timestr, "%dh %dm");
        $total_min = ($vals[0] * 60) + $vals[1];
        return "$total_min mins";
    }
    
    $timestr = "2h 15m";
    echo reformat_time_string($timestr); /* echoes '135 mins' */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2017-01-05
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多