Ben bende bazı PHP kodu kadar kırpma çok garip bir hata var. Sayfa kurslarına öğrenci kayıtları yönetiyor. Sayfada öğrencinin derslerin bir tablo olduğunu ve her satır bir tarih vardır: bunlar tamamlandığında onlar değerlendirmesini geçtiğinde ve onların sertifika aldı ne zaman, kayıtlı ne zaman.
Tablo veri (DB çizim verileri) PHP tarafından oluşturulan ve Javascript aslında tablo haline getirmektedir. PHP çıktısı şöyle JS kodu:
var e = new Enrolment();
e.contactId = 5801;
e.enrolId = 14834;
e.courseId = 3;
e.dateEnrolled = new Date(1219672800000);
e.dateCompleted = new Date(-1000); // magic value meaning they haven't completed.
e.resultDate = new Date(1223647200000);
e.certDate = new Date(1223560800000);
e.result = 95;
e.passed = true;
enrolments[14834] = e;
Veritabanında, tüm tarih alanları DATE
(değil DATETIME
) alanları olarak depolanır.
Hata tarihleri bir gün kapalı olarak görüntülenen ediliyor olmasıdır. Ben burada hiç yok ise bu (sunucu saati bir saat kapalı anlamına gelir), sunucu günışığı tasarrufu olan bir alanda olmak ile yapmak çok şey olduğunu şüpheli olur. Bu veri hazırlama ve işleme, iki farklı saat dilimleri yapılıyor özellikle nasıl, bir çok şeyi açıklıyor. Yani: sunucu kişinin 15 Ağustos günü gece yarısı tamamlanan müşteriye söyleyerek, ve müşteri yorumlama olduğu 14 Nisan 11:00 ve bu nedenle 14 Ağustos görüntüleme gibi.
Ama burada kafa karıştırıcı parçası: sadece resultDate ve certDate alanları için bunu yapıyor! Ben benim yerel sunucuya verileri kopyaladığınız ve dateEnrolled alan aynı ise üretim sunucu aslında, sadece bu iki alan için farklı bir zaman damgası (1 saat kapalı bir) gönderme olduğunu bulduk.
Burada veritabanından aynı kod ve verileri kullanarak çıkış bulunuyor:
// local server (timezone GMT+1000)
e.dateEnrolled = new Date(1219672800000); // 26 Aug 2008 00:00 +10:00
e.dateCompleted = new Date(-1000);
e.resultDate = new Date(1223647200000); // 11 Oct 2008 00:00 +10:00
e.certDate = new Date(1223560800000); // 10 Oct 2008 00:00 +10:00
// production server (timezone GMT+1100)
e.dateEnrolled = new Date(1219672800000); // 26 Aug 2008 00:00 +10:00
e.dateCompleted = new Date(-1000);
e.resultDate = new Date(1223643600000); // 10 Oct 2008 23:00 +10:00 **
e.certDate = new Date(1223557200000); // 09 Oct 2008 23:00 +10:00 **
Bu Yaz Saati sorumluydu olmamak ile ilgili bir sorun olup olmadığını anlamak, ancak dateEnrolled aynı nasıl fark edebilir?
Bir unix zaman damgası MySQL tarih dönüştürür PHP kodu şudur:
list ($year, $month, $day) = explode ('-', $mysqlDT);
$timestamp = mktime (0,0,0, $month, $day, $year);
Bunu düzeltmek konusunda herhangi bir fikir?