2

PHPでの時間計算の問題で立ち往生しています。私の例でお話しします:

私は web-server でグリーティング Web サイトをホストしましたが、このサーバーはインドにあります。これは、サーバーがインドのタイム ゾーンで実行されていることを意味します。今日の日付が '01/01/2013' で、翌日 02/01/2013 の午前 0:00 (午前 12:00) に英国に挨拶を送りたいとします。グリーティング カードを送信すると、php スクリプトがこのカードをインドのタイムゾーンで送信します。つまり、インドの午前 12 時にスクリプトが実行され、カードが送信され、英国は正確な時間の 5 時間前にこのカードを受け取ります。時間オフセットを使用して時間を取得した国の正しい時間を取得する方法を知っています。

$time = strtotime('H:m:s'.(time() - (serverOffset - ukOffset)))

では、時刻を 00:00AM に設定する方法、または現在の時刻の残り時間を 00:00AM に設定する方法は何ですか。何か手続きはありますか?

[新しいアップデート]

OK、解決策が見つかりました

$SERVER_OFFSET = 19800; //INDIA +5.50
$PARIS_TZ_HOUR = 1.0; //FRANCE-PARIS +1.00
$NEW_OFFSET = ($PARIS_TZ_HOUR * (60*60)); //new_offset 3600
$MINUTES = ($SERVER_OFFSET - $NEW_OFFSET)/60; 

// Lets date is: 2013-01-20 00:00:00
echo date('Y-m-d H:i:s', strtotime($MINUTES.'minutes', strtotime('2013-01-19')));  

簡単な言葉で:
(19800-3600)/60 = 270 (分)

270 分、つまり 4.5 時間
つまり、インド時間が 2013-01-20 00:00
になると、フランスでは 2013-01-19 19:30:00 になります 。インド時間が 2013-01-20 04:30 の場合は

2013-01-20 00:00 フランスで :)
時間を追加する代わりに分を使用しました。時間よりも分の方が正確な結果が得られるからです。

それだけです、それがあなたの人々を助けることを願っています

4

5 に答える 5

1

PHP では、探しているものを実現する方法が複数あります。

1) 特別に英国を探している場合は、gmdate関数を使用できます。http://php.net/manual/en/function.gmdate.php

2) DateTime クラスの setTimezone メソッドを使用します。http://php.net/manual/en/datetime.settimezone.php

3) date_default_timezone_set メソッドを使用します。http://php.net/manual/en/function.date-default-timezone-set.php

php オンライン マニュアルに良い例があり、2) と 3) の両方が、可能なタイムゾーンを設定し、指定された時間にイベントをトリガーするのに役立ちます。

于 2013-01-07T06:02:57.313 に答える
1

次のように date_default_timezone_set() を使用して、いつでもタイムゾーンを設定できます。

date_default_timezone_set('Europe/London');

しかし、それをしたくない場合は、次のようにして午前 0 時 (午前 12 時) のタイムスタンプを取得できます。

$ukOffset = 60*60*5.5; // UK is 5 hours 30 mins behind India's time
$midnight = strtotime('7 January 2013');
$midnightUK = $midnight-$ukOffset;

または、現在から現在までの残り時間を知りたい場合は、次のようにすることができます。

$ukOffset = 60*60*5.5;
$midnight = strtotime('7 January 2013');
$midnightUK = $midnight-$ukOffset;
$difference = $midnightUK - (time()-$ukOffset);
于 2013-01-07T05:48:25.983 に答える
0

PHP の DateTime クラスを使用すると、この問題は簡単になります。私は実証するためにこのコードを設定しました:-

date_default_timezone_set('Asia/Kolkata');//As my dev machine is on GMT, you probably don't need this.
$date = new DateTime();
var_dump($date);
$date->setTimezone(new DateTimeZone('Europe/London'));
var_dump($date);

出力:-

object(DateTime)[1]
  public 'date' => string '2013-01-07 19:44:08' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Asia/Kolkata' (length=12)
object(DateTime)[1]
  public 'date' => string '2013-01-07 14:14:08' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/London' (length=13)

基本的に、これはサーバー時間を取得し、それを英国時間と直接比較して、正しい時間にメッセージを送信できることを示しています.

詳細については、DateTimeドキュメントのマニュアルを参照してください。

于 2013-01-07T14:36:03.207 に答える
0

実行時に使用するタイムゾーンをカード スクリプトに設定してみませんか?

スクリプトの先頭に...

date_default_timezone_set('Europe/London');
于 2013-01-07T05:46:13.487 に答える
0

サーバーが目的のタイムゾーンから 5 時間遅れていると仮定すると、このようなことができます。

$date = date('h:i:s A', strtotime($today)+(60*60*5)); // $today is today date
于 2013-01-07T05:48:03.490 に答える