Penggunaan fungsi ZONAS pada PHP

Saya membuat aplikasi di mana saya harus menyimpan tanggal th di MySQL menggunakan fungsi PHP date().

<?php $finalize_at = date('Y-m-d H:i:s'); ?>

Tanggal-tanggal ini perlu dibandingkan di MySQL menggunakan fungsi NOW() untuk mengembalikan perbedaan dalam jam, misalnya:

SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;

Tetapi masalahnya adalah - fungsi tanggal PHP date('Y-m-d H:i:s') menggunakan pengaturan zona waktu PHP, dan fungsi NOW() mengambil timezome MySQL dari server MySQL.

Saya mencoba menyelesaikan melakukan ini:

  1. date_default_timezone_set('Europe/Paris'); Ini hanya berfungsi untuk PHP.
  2. date.timezone= "Europe/Paris"; Ini hanya berfungsi untuk PHP.
  3. SELECT CONVERT_TZ(now(), 'GMT', 'MET'); Ini kembali kosong.
  4. mysql> SET time_zone = 'Europe/Paris'; Ini melontarkan kesalahan dari konsol MySQL.

Dan zona waktu tidak berubah untuk MySQL.

Apakah ada cara untuk mengubah zona waktu untuk PHP dan MySQL tanpa harus melakukannya dari konsol MySQL, atau mengatur perubahan zona waktu dari suatu tempat di php.ini dan menjadikan nilai ini tersedia untuk PHP dan MySQL .

Sangat menghargai dukungan Anda.

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