php从自定义日期时间格式中删除时间
如果时间设置为:00:00:00,如何将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
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
因此,采用这种方法的主要原因是:
您的请求不清楚,但有关于
$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;
}