2011-07-21 9 views
1

PHP「TILカウントダウン」とGMT UTCタイム機能「時から」私はこれを行うことが見いださ機能で働いているが、私はそれがGMTのUTCタイムスタンプを動作させるためにしようとしている

EDIT : たぶん私の問題は、私はGMTにユーザー入力時間を「変換」していますどのようにしている...

私はgmdate('Y-m-d H:i:s',$the_user_input_date);が実際GMTにそれを「変換」しません

$the_user_input_date = strtotime('2011-07-20T01:13:00'); 
$utctime = gmdate('Y-m-d H:i:s',$the_user_input_date); 

をしていましたか?フォーマットするだけですか?多分私の問題です。私は、これはのように動作するように取得しようとしている

//local time in GMT 
2011-07-20T01:13:00 

//future time in GMT 
2011-07-20T19:49:39 

:ここ

は私が供給できる時間は次のようになります

Started 36 mins ago 
    Will start in 33 mins 
    Will start in 6 hrs 21 mins 
    Will start in 4 days 4 hrs 33 mins 

ここでイムは、これまでの作業何:

EDIT: new php code im working with, seems to ADD 10 HOURS on to my date. Any ideas? I updated it here: 

function ago($from) 
{ 
    $to = time(); 

    $to = (($to === null) ? (time()) : ($to)); 
    $to = ((is_int($to)) ? ($to) : (strtotime($to))); 
    $from = ((is_int($from)) ? ($from) : (strtotime($from))); 

    $units = array 
    (
    "year" => 29030400, // seconds in a year (12 months) 
    "month" => 2419200, // seconds in a month (4 weeks) 
    "week" => 604800, // seconds in a week (7 days) 
    "day" => 86400, // seconds in a day (24 hours) 
    "hour" => 3600,  // seconds in an hour (60 minutes) 
    "minute" => 60,  // seconds in a minute (60 seconds) 
    "second" => 1   // 1 second 
); 

    $diff = abs($from - $to); 
    $suffix = (($from > $to) ? ("from now") : ("ago")); 

    foreach($units as $unit => $mult) 
    if($diff >= $mult) 
    { 
    $and = (($mult != 1) ? ("") : ("and ")); 
    $output .= ", ".$and.intval($diff/$mult)." ".$unit.((intval($diff/$mult) == 1) ? ("") : ("s")); 
    $diff -= intval($diff/$mult) * $mult; 
    } 
    $output .= " ".$suffix; 
    $output = substr($output, strlen(", ")); 

    return $output; 
} 

@Jason

私はあなたがここで提案何しようとした:

function ago($dateto) 
    { 
     $datetime1 = new DateTime($dateto); 
     $datetime2 = new DateTime(); 
     $interval = $datetime1->diff($datetime2); 
     // print_r($interval); 

     $format = ''; 
     if ($interval->h) { 
       $format .= ' %h ' . ($interval->h == 1 ? 'hour' : 'hours'); 
     } 
     if ($interval->i) { 
       $format .= ' %i ' . ($interval->i == 1 ? 'minute' : 'minutes'); 
     } 
     // more logic for each interval 

     if ($format) { 
       echo $interval->format($format), ' ago'; 
     } 
     else { 
       echo 'now'; 
     } 
    } 

いつも私の時間の上10時間を追加しているようです。

何が起こっている可能性がありますか?

ターゲット時間をどのように保存しているかによってエラーが発生する可能性がありますか? 2011年7月20日午後11時

その後:

を誰かがその時間を提出したユーザーは常に自分のローカル時間と、次のように探して起動します。この

のように変換され、保存された時間を提出

$time = mysql_real_escape_string($_POST['time']); 

$the_date = strtotime($time); 

//make user input time into GMT time 
$utctime = gmdate('Y/m/d H:i:s',$the_date); 

$query = "INSERT INTO $table (time) VALUES ('$utctime');"; 
mysql_query($query); 
+0

を使用すると、PHPのバージョンは何を使用していますか?この機能の多くは、PHP> = 5.3の 'DateTime'クラスに組み込まれています。 –

+0

'PHP 5.2 FastCGI'は私のホストプロバイダに合わせて現在設定されているものです。それは私にスイッチを作るなら 'PHP 5.3 FastCGI'を選択するオプションを与えます。私は達成しようとしていることをどうすればよいでしょうか? – brybam

答えて

2

あなたがPHP> = 5.3にアクセスできる場合は、DateTime::diff()をお勧めします。返されたDateIntervalは、ディスプレイに必要なすべての部品を提供するだけでなく、format()のような独自のメソッドを持ちます。

ここにあなたのアイデアを紹介します。 PHPドキュメントのリンクのコメントには、より完全なサンプルがあります。

<?php 
$datetime1 = new DateTime('2011-07-20'); 
$datetime2 = new DateTime(); 
$interval = $datetime1->diff($datetime2); 
// print_r($interval); 

$format = ''; 
if ($interval->h) { 
     $format .= ' %h ' . ($interval->h == 1 ? 'hour' : 'hours'); 
} 
if ($interval->i) { 
     $format .= ' %i ' . ($interval->i == 1 ? 'minute' : 'minutes'); 
} 
// more logic for each interval 

if ($format) { 
     echo $interval->format($format), ' ago'; 
} 
else { 
     echo 'now'; 
} 

それは(私のシステム上で)出力:

22時間10分前

+0

ありがとう、ジェイソン、私はまだいくつかの奇妙なエラーが発生しているようです。私は私が何を試みたかを示すために自分の投稿を更新しました。何か案は? – brybam

+0

私はこれがあなたの時間の記憶に由来していると信じています。これが起こる可能性のある場所はたくさんあります.PHP、MySQLなど私の提案は全面的にGMTになるでしょう。 –

+0

これは私がすでにやっていることです。あなたが上を見れば、私は時間を取っていて、ユーザーが時間を指定してGMTに変換していることを示しました。 GMTが正しくないのは私のプロセスですか? (私の質問の最後に数分前に追加しました) – brybam

0

$datefromは文字列ですが、$datetoはintです。そのようにそれらを引くことはできません。

$datefrom=gmdate("Y/m/d\TH:i:s\Z"); 

実行します:代わりの

$datefrom=time(); 

PS。残りのコードはチェックしませんでした。

+0

私はあなたが提案したものを正確に試しました。今から1時間後の 'echo ago( '2011/07/20/T21:23:00Z')'を試してみたところ、 '-10919 seconds ago'と表示されてしまったので、うまくいきませんでした:/ – brybam

+0

' 2011/07/20/T21:23:00Z'はEDTから1時間後です。 '2011/07/20/T21:23:00 EDT'にしてください。それは正しいです。または、現地時間の '2011/07/20/T21:23:00'のみ。 – Ariel

+0

もう1つのことは、私がtime()を実行してもサーバーの時刻を取得できないということですか? GMTなので、いつも標準化された時間です。なぜ私はgmdate – brybam

関連する問題

 関連する問題