-1

isClean00:00:00 に設定されている場合、時間を自動的に削除するように設定するにはどうすればよいですか。したがって、時間が設定されていない場合や真夜中の場合は、何も表示されません。

/**
 * 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;
}

詳細: 当社の CMS は、 を読み取り、<match>これをデータベースの列名と自動的に照合するか、手動で書き込み<format>long_datetime</format>ます。

したがって、この方法の主な理由は次のとおりです。

  1. XML オプションを php datetime に接続します。
  2. NOW、相対日付などの追加機能を追加し、0 に設定した場合に日時をクリーンアップする機能を追加
4

1 に答える 1

1

あなたの要求は明確ではありませんが、明確にされており、これが役立つ$varto automatically remove the time確信しています

$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);

出力

Yesterday at 11th Oct 12 
                          ^--- Date was cleaned instead of H:i in the template

使用した機能

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;
}
于 2012-10-10T22:37:54.643 に答える