3

現在、ファイルの変更時刻を次のように報告しています。

$this->newScanData[$key]["modified"] = filemtime($path."/".$file);
$modifiedtime = date($date_format." ".$time_format, $this->newScanData[$key]["modified"]);

私には何も問題はないと思っていましたが、私のコードのユーザーが 4 時間遅れていると報告しています。これを考えることができる唯一の理由は、サーバーがユーザーとは異なるタイムゾーンにあるためです。$gmt_offset各ユーザーには、ユーザーがいるタイムゾーンを格納するために使用できる変数があります。$gmt_offset基本的な float オフセットとして格納されます。

サーバーは、必ずしも GMT-0 ではなく、任意のタイムゾーンにある可能性があります。サーバーがユーザーと同じタイムゾーンにない可能性があります。

$modifiedtimeに基づいてタイムゾーンでユーザーの正しい時間を取得するにはどうすればよい$gmt_offsetですか?

4

3 に答える 3

2

filemtime()サーバーの時計に基づいて UNIX タイムスタンプを返します。ユーザーから gmt へのオフセットを使用できるため、次のように UNIX タイムスタンプを GMT に変換してから、ユーザーの timszone に変換する必要があります。

<?php
    list($temp_hh, $temp_mm) = explode(':', date('P'));
    $gmt_offset_server = $temp_hh + $temp_mm / 60;
    $gmt_offset_user   = -7.0;
    $timestamp         = filemtime(__FILE__);
    echo sprintf('
        Time based on server time.........: %s
        Time converted to GMT.............: %s
        Time converted to user timezone...: %s
        Auto calculated server timezone...: %s
        ',
        date('Y-m-d h:i:s A', $timestamp),
        date('Y-m-d h:i:s A', $timestamp - $gmt_offset_server * 3600),
        date('Y-m-d h:i:s A', $timestamp - $gmt_offset_server * 3600 + $gmt_offset_user * 3600),
        $gmt_offset_server
    );

    // Output based on server timezone = PKT (+05:00 GMT) and user timezone = PDT (-07:00 GMT)
    // Time based on server time.........: 2011-06-09 03:54:38 PM
    // Time converted to GMT.............: 2011-06-09 10:54:38 AM
    // Time converted to user timezone...: 2011-06-09 03:54:38 AM
    // Auto calculated server timezone...: 5
于 2011-06-09T09:55:13.017 に答える
1

必要なのはstrtotime()機能です。日付をgmdateに変更し、サーバーの時刻をGMTに変換しました

たとえば、10:00:00のような時間形式が必要な場合

gmdate("H:i:s", strtotime($gmt_offset . " hours"));

詳細はこちら:

http://php.net/manual/en/function.strtotime.php

http://php.net/manual/en/function.gmdate.php

于 2011-06-09T09:47:16.443 に答える
1
$modifiedtime = date($date_format." ".$time_format, $this->newScanData[$key]["modified"] + ($gmt_offset * 3600));

$gmt_offset は int ではなく float 型である必要があります -- アデレードの GMT +09:30 のように、一部のタイム ゾーンには分数の違いがある場合があります

于 2011-06-09T09:54:20.583 に答える