PHP: Nasıl bir sunucu damgası kullanıcının dilimine göre dönüştürebilirim?

3 Cevap php

Şu anda veritabanında 'time ()' fonksiyonunu kullanarak kez depoluyorum. Ancak, sunucunun saat dilimini kullanıyor, ve her kullanıcı kendi zaman dilimine (kendi profilinde set) göre zaman görmek için isterdim.

Ben damgası dönüşüm nasıl yapabilirim? (Ve ben değil okunabilir zaman, zaman damgası timestamp demek)

Senin yardım takdir

3 Cevap

Joonas dediği gibi, UNIX damgaları tanım UTC tarafından, ama sen gerçekten gerekirse timezone-özel damgaları taklit birlikte böyle bir şey kesmek olabilir:

// PHP 5.3 - OO Code
$timestamp = time();
echo 'Unix timestamp: ' . $timestamp;
$dt = DateTime::createFromFormat('U', $timestamp);
$dt->setTimeZone(new DateTimeZone('America/New_York'));
$adjusted_timestamp = $dt->format('U') + $dt->getOffset();
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;

// PHP 5.3 - Procedural Code
$timestamp = time();
echo 'Unix timestamp: ' . $timestamp;
$dt = date_create_from_format('U', $timestamp);
date_timezone_set($dt, new DateTimeZone('America/New_York'));
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt);
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;

Gerçekten içinizde tarihini değiştirmek için zaman damgalarını kendilerini hack olmamalı, sadece kullanıcıya biçimlendirilmiş datestamp sunmadan önce zaman damgası dilimini geçerli olmalıdır.

This is a modified version of Mike's code that should work for PHP 5 >= 5.2.0 as found on php.net

// OO Code
$st = 1170288000 //  a timestamp 
$dt = new DateTime("@$st"); 
$dt->setTimeZone(new DateTimeZone('America/New_York'));
$adjusted_timestamp = $dt->format('U') + $dt->getOffset();
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;

// Procedural Code
$st = 1170288000 //  a timestamp 
$dt = date_create("@$st"); 
date_timezone_set($dt, timezone_open('America/New_York'));
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt);
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;

UNIX damgaları tüm dönüşüm hemen önce gerçek zaman damgaları ile baskı ziyade yapılması gerektiği anlamına gelir, UTC tanım gereği vardır.

Bunu yapmak için nasıl, ancak şu anda bunları biçimlendirme nasıl kullandığınıza bağlıdır. Ben PHP yerleşik dilimi taşıma inanıyorum.