2016-04-12 18 views
0

Uygulamamda, özellikle 365 gün boyunca mysql cinsinden varchar alanı var, yani '0000-04-12' (12 Nisan). Şu anda, Calgary-Kanada'nın gün ışığından yararlanma bölgesinde, 2:00 ile Mart ayının ikinci haftası - - 2:00 pm, ilk Pazar Kasım ayları arasında, alandan belirli bir tarihte düşüp düşmediğini kontrol etmesi gereken bir fonksiyon yaşıyorum. ve buna göre doğru veya yanlış döndürür. Gün ışığından yararlanma hesaplamaları Php

<?php 
/* 
@param $time form Database e.g. 0000-04-12 
*/ 
function isDaylightSaving($time){ 
    // to replace 0000 in start with current year 
    $today = substr_replace($time,date('Y'),0,4); 
    $date = new DateTime($today); 
    $week = $date->format('W'); 

    // TO DO 
    // find date falls between 2:00 pm Second Sunday of March to 2:00 pm First Sunday of November. 

    return ; 
} 

?> 

Şu anda onun belirli yıla göre hafta dönen ama ben get.Thanks alamıyorum özellikle mantık gerçekleştirmek için aya göre hafta kontrol etmeniz gerekir.

+0

Yani, sunucunuzun varsayılan saat dilimine güveniyorsunuz? MySQL'de kaydedilen tarih nasıl? UTC olarak mı yoksa bir ofset mi var? Ayrıca, lütfen [bu soru ve yanıtı kontrol edin] (http://stackoverflow.com/questions/21946276/php-daylight-savings-conundrum). – Mjh

+0

@Mjh, DateTime init'i görebiliriz, böylece tüm DateTime aynı TZ'ye sahip olur. Dahası, burada herhangi bir TZ bilgisi bulunmuyor gibi gözüküyor, bu yüzden DST'nin verilmiş olan tarihlere bağlı olarak cihazda olduğunu kabul edebiliriz. – Lpu8er

+0

@Mjh, '0000-04-12' gibi dize formatında değildir ve özel bir sorunla karşılaştım. –

cevap

-1

bu deneyin:

if($time > date('Y-m-d',strtotime('second sunday of march')) && 
    $time < date('Y-m-d',strtotime('first sunday of november'))){ 
    return true; 
}else{ 
    return false; 
} 

strtotime() büyük bir işlevdir.

-1

@Ezenhis tarafından verilen örnek iyi geliyor, ancak bazı unsurlardan yoksundur. bunu genişletme: Sen tarih işlevlerden dizeleri karşılaştırmak gerekir

$low = new DateTime('@'.strtotime('second sunday of march')); 
$high = new DateTime('@'.strtotime('first sunday of november')); 
if($date > $low && $date < $high) { 
    // we're good 
} 

. DateTime kullanmak, PHP 5.0'dan beri PHP'de tarih/saat işlemek için daha iyi bir yoldur.

İlgili konular