Penggunaan fungsi GMT-8 pada PHP

Saya bingung saat menggunakan php untuk menangani tanggal/waktu.

Apa yang saya coba lakukan adalah ini: Ketika seorang pengguna mengunjungi halaman saya, saya menanyakan zona waktunya dan kemudian menampilkan 'hari dalam seminggu' di zona waktunya.

Saya tidak ingin menggunakan hari browser. Saya ingin melakukan perhitungan ini di php.

Inilah bagaimana saya berusaha mencapainya:

  1. Zona waktu dimasukkan oleh pengguna
  2. Cap waktu unix dihitung dengan fungsi waktu php ().

Tapi saya tidak tahu bagaimana melanjutkan ... Bagaimana saya mendapatkan 'hari dalam seminggu' di zona waktu ini.

Solusi saya adalah ini:

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

Output adalah: Tuesday

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

Output adalah: Tue

Terima kasih banyak kawan untuk komentar cepat Anda.

Inilah yang akan saya gunakan sekarang. Memposting fungsi di sini sehingga seseorang dapat menggunakannya.

public function getDayOfWeek($pTimezone)
{

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

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

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

}

Laporkan jika Anda menemukan koreksi.

Saya pikir ini adalah jawaban yang benar, cukup ubah Europe/Stockholm ke zona waktu pengguna.

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

Representasi numerik ISO-8601 hari dalam seminggu (ditambahkan dalam PHP 5.1.0) 1 (untuk hari Senin) hingga 7 (untuk hari Minggu)

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

Untuk daftar zona waktu yang didukung, lihat http://php.net/manual/en/timezones.php

Cara cepat lain:

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

Jika Anda bisa mendapatkan zona waktu mereka, Anda bisa menambahkannya ke timestamp saat ini dan kemudian menggunakan fungsi gmdate untuk mendapatkan waktu lokal mereka.

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

Ini harus bekerja (tidak mengujinya, jadi YMMV). Ia bekerja dengan menyimpan zona waktu skrip saat ini, mengubahnya ke yang ditentukan oleh pengguna, mendapatkan hari dalam seminggu dari fungsi date() pada stempel waktu yang ditentukan, dan kemudian mengatur zona waktu skrip kembali ke awal.

Anda mungkin memiliki beberapa petualangan dengan pengidentifikasi zona waktu.

"Day of Week" sebenarnya adalah sesuatu yang bisa Anda dapatkan langsung dari fungsi php date () dengan format "l" atau "N" masing-masing. Lihat manual

sunting: Maaf saya tidak membaca tulisan Kalium dengan benar, dia sudah menjelaskannya. Salahku.

Berdasarkan pada salah satu solusi lain dengan bendera untuk beralih antara minggu dimulai pada hari Minggu atau Senin

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);
}

Periksa tanggal adalah hari Senin atau minggu sebelum mendapatkan hari Senin terakhir atau minggu terakhir

 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);
}