web-dev-qa-db-ja.com

特定のタイムゾーンでPHPで曜日を見つける方法

日付/時刻を処理するためにphpを使用しているときに混乱しています。

私がやろうとしているのはこれです:ユーザーが私のページにアクセスするとき、私は彼のタイムゾーンを尋ね、それから彼のタイムゾーンで「曜日」を表示しています。

ブラウザの日を使いたくありません。この計算はphpで行いたいです。

これは私がそれを達成しようとしている方法です:

  1. ユーザーが入力したタイムゾーン
  2. Php time()関数によって計算されたUnixタイムスタンプ。

しかし、どうすればいいのかわかりません...このタイムゾーンで「曜日」を取得する方法を教えてください。

92
varun
$dw = date( "w", $timestamp);

ここでわかるように、$ dwは0(日曜日)から6(土曜日)までです。 http://www.php.net/manual/en/function.date.php

142
Botond Béres

私の解決策はこれです:

$tempDate = '2012-07-10';
echo date('l', strtotime( $tempDate));

出力は:Tuesday

$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));

出力は:Tue

114
trante

迅速なコメントをありがとう。

これは私が今使用するものです。ここに関数を投稿して、誰かがそれを使用できるようにします。

public function getDayOfWeek($pTimezone)
{

    $userDateTimeZone = new DateTimeZone($pTimezone);
    $UserDateTime = new DateTime("now", $userDateTimeZone);

    $offsetSeconds = $UserDateTime->getOffset(); 
    //echo $offsetSeconds;

    return gmdate("l", time() + $offsetSeconds);

}

修正を見つけた場合は報告してください。

20
varun

これは正解だと思います。Europe/Stockholmをユーザーのタイムゾーンに変更するだけです。

$dateTime = new \DateTime(
    'now',
    new \DateTimeZone('Europe/Stockholm')
);
$day = $dateTime->format('N');

ISO-8601曜日の数値表現(PHP 5.1.0に追加)1(月曜日)から7(日曜日)

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

サポートされているタイムゾーンのリストについては、 http://php.net/manual/en/timezones.php を参照してください

18
cjohansson

別の簡単な方法:

date_default_timezone_set($userTimezone);
echo date("l");
8
Andre

タイムゾーンオフセットを取得できる場合は、現在のタイムスタンプに追加してから gmdate 関数を使用して現地時間を取得できます。

// let's say they're in the timezone GMT+10
$theirOffset = 10;  // $_GET['offset'] perhaps?
$offsetSeconds = $theirOffset * 3600;
echo gmdate("l", time() + $offsetSeconds);
5
nickf
$myTimezone = date_default_timezone_get();
date_default_timezone_set($userTimezone);
$userDay = date('l', $userTimestamp);
date_default_timezone_set($myTimezone);

これは機能するはずです(テストしなかったので、YMMV)。スクリプトの現在のタイムゾーンを保存し、ユーザーが指定したタイムゾーンに変更し、指定されたタイムスタンプのdate()関数から曜日を取得し、スクリプトのタイムゾーンを元に戻します。で始まる。

ただし、タイムゾーン識別子を使用したアドベンチャーもあります。

3
Kalium

「曜日」は、実際には、それぞれ「l」または「N」の形式でphp date()関数から直接取得できるものです。 マニュアル をご覧ください

編集:申し訳ありませんが、Kaliumの投稿を適切に読んでいませんでした、彼は既に説明しました。私の悪い。

2
HerdplattenToni

日曜日または月曜日から始まる週を切り替えるフラグを備えた他のソリューションの1つに基づく

function getWeekForDate($date, $weekStartSunday = false){

    $timestamp = strtotime($date);

    // Week starts on Sunday
    if($weekStartSunday){
        $start = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Sunday', $timestamp));
        $end = (date("D", $timestamp) == 'Sat') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Saturday', $timestamp));
    } else { // Week starts on Monday
        $start = (date("D", $timestamp) == 'Mon') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Monday', $timestamp));
        $end = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Sunday', $timestamp));
    }

    return array('start' => $start, 'end' => $end);
}
2
Drinkynet

最後の月曜日または最後の日曜日を取得する前に、チェック日は月曜日または日曜日です

 public function getWeek($date){
    $date_stamp = strtotime(date('Y-m-d', strtotime($date)));

     //check date is sunday or monday
    $stamp = date('l', $date_stamp);      
    $timestamp = strtotime($date);
    //start week
    if(date('D', $timestamp) == 'Mon'){            
        $week_start = $date;
    }else{
        $week_start = date('Y-m-d', strtotime('Last Monday', $date_stamp));
    }
    //end week
    if($stamp == 'Sunday'){
        $week_end = $date;
    }else{
        $week_end = date('Y-m-d', strtotime('Next Sunday', $date_stamp));
    }        
    return array($week_start, $week_end);
}
2
user2214236