如何格式化日期从ps -p {PID} -o etime =到PHP的日期时间?

时间:2018-04-22 17:29:32

标签: php date datetime unix php-7.1

我目前在服务器上运行一个python脚本,列出了我能找到的所有最大的序列。对于演示文稿,我想指定脚本运行多长时间。

目前,我正在使用函数shell_exec('ps -p 1696 -o etime=')来获取自启动过程以来经过的时间。 24小时很好,在此之后,我使用dd-hh:mm:ss

的语法很奇怪

我没有从php7.1的所有日期相关函数中找到任何解决方案来解析这个值,你知道我该怎么做才能得到时间"可读" 。 Regex会在这里做点什么吗?

我的意思是我希望php文件回复类似"脚本运行2天,16小时35分14秒"

这是我的php文件:

<?php
$time = shell_exec('ps -p 1696 -o etime='); 
// Where 1696 is the PID of the python script
echo "Collatz.py running since :" . $time; 
echo '<pre>'.file_get_contents('/var/www/html/logs.txt').'</pre>';

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来匹配ps生成的时间字符串,将它们分组到匹配的组中,然后使用它们来构建字符串。

$time = shell_exec('ps -p 3646 -o etime=');

preg_match("/^(((\\d*)-)?(\\d*):)?(\\d{2}):(\\d{2})$/", $time, $matches);

$days = $matches[3];
$hours = $matches[4];
$minutes = $matches[5];
$seconds = $matches[6];

$time_string = "";
$time_string .= strlen($days) > 0 ? $days . " days, " : "";
$time_string .= strlen($hours) > 0 ? $hours . " hours " : "";
$time_string .= strlen($minutes) > 0 ? $minutes . " minutes and " : "";
$time_string .= $seconds . " seconds";

echo "Running since: " . $time_string;