2012-02-09 7 views
0

私は自分のアプリケーションでFacebookの統合に取り組んでいます。Facebookのタイムゾーンをカスタム文字列に変換する方法

は、Facebookはインドのような形式で、ユーザーのタイムゾーンを返します。その

5.5 

しかし、既存のタイムゾーンはフォーマット

+05:30 

この変換のための任意の関数やアルゴリズムの提案でデータベースに保存されています。

ありがとうございました。

答えて

2

これは少し長いですが、必要な場合は必要な先行ゼロなどを追加します。

$num = -5.5; 
$res = ($num < 0 ? '-' : '+') . (abs($num) < 10 ? '0' : '') . abs((int)$num) . ':'; 
// --> -05: 
$mins = round((abs($num) - abs((int)$num)) * 60); 
// --> 30 
$res .= ($mins < 10 ? '0' : '') . $mins; 
echo $res; 
// -05:30 
+0

ありがとうso much.it本当に助けてくれるでしょう –

+0

@ edioeの提案は、あなたが先のゼロを気にしないなら、もっと清潔です。 – inhan

1

簡単peasy($ = 5.5と仮定):

$tz = ($a > 0 ? '+' : '-') . ((int) $a) . ':' . (($a - (int)$a)*60) 

最初のビットがあなたを取得 - 第二(INT)に$キャスト、または+記号(右/左タイムゾーン)を使用すると、小数部分を失います3番目のビットは最初に小数部分を取得します(私はそこにPHP関数があると確信していますが、基本的にはCから来ます:5.5 - (int)5.5 = 5.5 - 5 = 0.5)。小数部分は時間で表示されます(5.5時間は5時間30分です)ので、基本的には0.5 * 60分の分数が得られます。

編集:ここではクリーナー(ワンライナー)バージョンです:

$time = sprintf("%+03d:%2d", (int)$a, abs($a-(int)$a)*60); 

この1はかなり簡単です。

+0

ありがとうございます。 –

+0

-5.5は正しい結果を与えません。 – inhan

+1

** abs **ここでは 'abs((int)$ a)'と 'abs(($ a - (int)$ a)* 60)'が必要です。 – inhan

関連する問題