Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php从自定义日期时间格式中删除时间_Php - Fatal编程技术网

php从自定义日期时间格式中删除时间

php从自定义日期时间格式中删除时间,php,Php,如果时间设置为:00:00:00,如何将isClean设置为自动删除时间。因此,如果没有设置时间或午夜,则不要显示任何内容 /** * Perform datetime formatting operations. * - relative: if today/yesterday * - clean: remove time if 00:00 * * @param string $var * @param string||array $params * @return string

如果时间设置为:00:00:00,如何将
isClean
设置为自动删除时间。因此,如果没有设置时间或午夜,则不要显示任何内容

/**
 * Perform datetime formatting operations.
 * - relative: if today/yesterday
 * - clean: remove time if 00:00
 *
 * @param string $var
 * @param string||array $params
 * @return string
 */
protected function datetime($var,$params) {
    date_default_timezone_set("Europe/London");
    // 1970-01-01 00:00:00
    $template = $params;
    $isRelative = false;
    $isClean = false;
    if (is_array($params) && !empty($params['template'])) {
        if (!empty($params['relative']) && trim(strtolower($params['relative'])) == 'yes') {
            $isRelative = true;
        }
        if (!empty($params['clean']) && trim(strtolower($params['clean'])) == 'yes') {
            $isClean = true;
        }
        $template = $params['template'];
    }

    // check if its empty or not?
    if(strlen($var)<1) return $var;

    // ignore invalue request throw error?
    if(is_array($template)) return $var;

    if($var == "NOW") $var = date("d-m-Y H:i:s");

    $out = $var;
    if(strpos($out,":") === false) {
        $out = trim($out);
        $out .= " 00:00:00";
    }

    if(($timestamp = $this->getTimestamp($out)) !== false) {
        if ($isRelative) {
            $time = date('H:i', $timestamp);
            if (date('Ymd') == date('Ymd', $timestamp)) {
                // Today
                return sprintf("Today at %s", $time);
            } else {
                // Yesterday?
                $today = strtotime("12:00:00");
                $yesterday = strtotime('-1 day', $today);

                if (abs($yesterday - $timestamp) < 12*3600) {
                    return sprintf("Yesterday at %s", $time);
                }
            }
        }

        $var = date($template,$timestamp);
    }

    return $var;
}
/**
*执行日期时间格式化操作。
*-亲属:如果今天/昨天
*-清洁:如果00:00,则移除时间
*
*@param字符串$var
*@param字符串| |数组$params
*@返回字符串
*/
受保护函数datetime($var,$params){
日期默认时区设置(“欧洲/伦敦”);
// 1970-01-01 00:00:00
$template=$params;
$isRelative=false;
$isClean=false;
if(is_数组($params)&&!空($params['template'])){
如果(!empty($params['relative'])和&trim(strtolower($params['relative']))=='yes'){
$isRelative=true;
}
如果(!empty($params['clean'])和&trim(strtolower($params['clean']))=='yes'){
$isClean=true;
}
$template=$params['template'];
}
//检查它是否为空?
if(strlen($var)getTimestamp($out))!==false){
如果($isRelative){
$time=日期('H:i',$timestamp);
如果(日期('Ymd')==日期('Ymd',$timestamp)){
//今天
返回sprintf(“今天在%s,$time”);
}否则{
//昨天?
$today=标准时间(“12:00:00”);
$昨天=标准时间('-1天',$今天);
如果(abs($昨天-$timestamp)<12*3600){
返回sprintf(“昨天在%s,$time”);
}
}
}
$var=日期($template,$timestamp);
}
返回$var;
}
更多信息:我们的CMS通过读取
并自动将其与数据库列名匹配,或者手动编写
long\u datetime

因此,采用这种方法的主要原因是:

  • 将XML选项与php日期时间连接
  • 添加额外的功能,如“现在”、“相对日期”,以及在设置为0s时清除日期时间的功能

  • 您的请求不清楚,但有关于
    $var
    自动删除时间的说明
    我相信这会有所帮助

    $xml = '
    <patterns>
            <pattern>
        <match>date</match>
        <datetime>d/m/Y</datetime>
    </pattern>
    
    <pattern>
        <match>datetime</match>
        <datetime>d/m/Y H:i</datetime>
    </pattern>
    
    <pattern>
        <match>datetime_nice</match>
        <datetime>jS F Y, H:i</datetime>
    </pattern>
    
    <pattern>
        <match>datetime_iso</match>
        <datetime>c</datetime>
    </pattern>
    
    <pattern>
        <match>datetime_relative</match>
        <datetime>
            <relative>YES</relative>
            <clean>yes</clean>
            <template>jS M y, H:i</template>
        </datetime>
    </pattern>
    
    <pattern>
        <match>date_relative</match>
        <datetime>
            <relative>yes</relative>
            <template>jS M, Y</template>
        </datetime>
    </pattern>
    
    <pattern>
        <match>long_datetime</match>
        <datetime>
            <relative>YES</relative>
            <template>jS M Y \a\t H:i</template>
        </datetime>
    </pattern>
    </patterns>     
    ';
    
    echo simpleDateTime("long_datetime",$xml);
    
    使用的功能

    function simpleDateTime($var, $xml) {
        $list = getList($xml);
        $list = $list[$var];
        $date = new DateTime("now", new DateTimeZone("Europe/London"));
        $output = $date->format($list['template']);
        if ($list['clean'] === true) {
            $date->setTime(0, 0, 0);
            $output = str_replace("00:00", "", $date->format($list['template']));
        }
        $output = trim($output);
        $output = rtrim($output, ",");
        if ($list['reletive'] === false) {
            return sprintf("Today at %s", $output);
        } else {
            $date->modify("+1 day");
            return sprintf("Yesterday at %s", $output);
        }
    }
    
    function getList($xml) {
        $xml = new SimpleXMLElement($xml);
        $list = array();
        foreach ( $xml->children() as $pattern ) {
            $item = array();
            $item['reletive'] = false;
            $item['clean'] = false;
    
            if (isset($pattern->datetime->template)) {
                $item['reletive'] = (strtoupper($pattern->datetime->relative) == "YES") ? true : false;
                $item['clean'] = (strtoupper($pattern->datetime->clean) == "YES") ? true : false;
                $item['template'] = (string) $pattern->datetime->template;
            } else {
                $item['template'] = (string) $pattern->datetime;
            }
    
            $list[(string) $pattern->match] = $item;
        }
        return $list;
    }
    

    使用DateTime对象将解决许多令人头痛的问题—对于这样一个简单的任务,代码太多了……而且,我还不是100%理解此函数的用途。预期的输入和输出是什么?我们能留下你的代码,仅仅理解你想要什么吗。。。我相信可以做得更简单@JohnMagnolia@Baba我真的不想从这段代码开始,因为我知道它已经在以前的项目/旧的php版本上运行了。我更愿意修改代码,使其成为可能,但这不是我想要的,也不是它现在的工作方式。我将尝试将XML删除到一个简单的数组中,可能这部分比较混乱,并显示输出示例,以便您更好地理解。如果您有示例和输出,请告诉我@John MagnoliaJust用额外的调试数据更新了答案,希望是这样helps@John木兰花这些都是轻微的修正。。。请参阅更新的代码
    function simpleDateTime($var, $xml) {
        $list = getList($xml);
        $list = $list[$var];
        $date = new DateTime("now", new DateTimeZone("Europe/London"));
        $output = $date->format($list['template']);
        if ($list['clean'] === true) {
            $date->setTime(0, 0, 0);
            $output = str_replace("00:00", "", $date->format($list['template']));
        }
        $output = trim($output);
        $output = rtrim($output, ",");
        if ($list['reletive'] === false) {
            return sprintf("Today at %s", $output);
        } else {
            $date->modify("+1 day");
            return sprintf("Yesterday at %s", $output);
        }
    }
    
    function getList($xml) {
        $xml = new SimpleXMLElement($xml);
        $list = array();
        foreach ( $xml->children() as $pattern ) {
            $item = array();
            $item['reletive'] = false;
            $item['clean'] = false;
    
            if (isset($pattern->datetime->template)) {
                $item['reletive'] = (strtoupper($pattern->datetime->relative) == "YES") ? true : false;
                $item['clean'] = (strtoupper($pattern->datetime->clean) == "YES") ? true : false;
                $item['template'] = (string) $pattern->datetime->template;
            } else {
                $item['template'] = (string) $pattern->datetime;
            }
    
            $list[(string) $pattern->match] = $item;
        }
        return $list;
    }