2011-12-25 9 views
6

ある特定のタイムスタンプからtoday/tomorrow/next sunday/etc.を出力するいくつかの関数timetostrがPHPにありますか?そのようにtimetostr(strtotime(x))=xphp strtotime reverse

+2

date()。 http://php.net/manual/en/function.date.phpを参照してください。 –

+0

@Andypandy:私は 'date()'について知っています。私は、 'strtotime'の逆を行う直接関数があるのか​​と尋ねました。 – prongs

+0

日付でない場合、私は分かりません...あなたはもっと文脈を提供することができますか? ($ timestring-date( 'l'、$ timestamp)は機能しません) –

答えて

9

これは、ここに来る人に便利です。

/** 
* Format a timestamp to display its age (5 days ago, in 3 days, etc.). 
* 
* @param int  $timestamp 
* @param int  $now 
* @return string 
*/ 
function timetostr($timestamp, $now = null) { 
    $age = ($now ?: time()) - $timestamp; 
    $future = ($age < 0); 
    $age = abs($age); 

    $age = (int)($age/60);  // minutes ago 
    if ($age == 0) return $future ? "momentarily" : "just now"; 

    $scales = [ 
     ["minute", "minutes", 60], 
     ["hour", "hours", 24], 
     ["day", "days", 7], 
     ["week", "weeks", 4.348214286],  // average with leap year every 4 years 
     ["month", "months", 12], 
     ["year", "years", 10], 
     ["decade", "decades", 10], 
     ["century", "centuries", 1000], 
     ["millenium", "millenia", PHP_INT_MAX] 
    ]; 

    foreach ($scales as list($singular, $plural, $factor)) { 
     if ($age == 0) 
      return $future 
       ? "in less than 1 $singular" 
       : "less than 1 $singular ago"; 
     if ($age == 1) 
      return $future 
       ? "in 1 $singular" 
       : "1 $singular ago"; 
     if ($age < $factor) 
      return $future 
       ? "in $age $plural" 
       : "$age $plural ago"; 
     $age = (int)($age/$factor); 
    } 
} 
+0

予期せぬ「リスト」(T_LIST)というエラーが表示されます。私は間違って何をしていますか? – hozza

+0

PHP版のものは何か?私はforeachの中で 'list($ singular、$ plural、$ factor)= $ scale;'というリストを宣言し、foreachのpramsのリストを '$ list'で置き換えて動作させました – hozza

+0

正しいです。 PHP 5.5では、 "list()"(http://php.net/manual/en/control-structures.foreach.php)でネストされた配列をアンパックしました。 –

1

これは帰納法ではないため、逆関数strtotimeはありません。 strtotimeを使用するときにUNIXタイムスタンプを取得するソース文字列は、さまざまな方法でフォーマットできます。だから、もしあなたがその関数を逆にすることにしたら、どのような文字列フォーマットを使うべきか、どのように知ることができますか?これは、2010年8月5日か2000年9月10日かのようになります。これはまさに逆機能がない理由ですが、Andypandyが正しく言ったように、date()を使用しなければなりません。と一緒に。私はこの質問が古くなっていることを知っていますが、私はそれがこの答えに値すると思っているので、他のユーザーはなぜPHPにそのような機能がないのか理解しています。

+5

に提出されたフレンドリーな日付形式のものですが、技術的に「正しい」とはOPの質問には答えませんが、それよりもよく知っているすべての知っているプログラマーの否定的なステレオタイプ人は質問をする。別のアプローチはこれのようなものを言うだろう - > http://stackoverflow.com/a/3040437/830899 – unsynchronized

+3

日付( "Ymd"、時間())は仕事をすることができます。 – Qinjie