2012-11-12 10 views
7

jestem ciągnięcie surowego wygenerowane informacje mysql timestamp z $ item_date z bazy danych w formacie daty PHP:PHP data datownik do strefy czasowej użytkownika

if (($timestamp = strtotime($item_date)) === false) { 
    echo "The timestamp string is bogus"; 
} else { 
    echo date('j M Y h:i:sA', $timestamp); 
} 

Wyjście folowwing strefę serwera (UTC):

12 listopada 2012 17:54:11

ale chcę go do konwersji według strefy czasowej użytkownika

Przykład: załóżmy, że czas użytkownika to 13 listopada 2012 07:00:00 AM (+0800 GMT), a czas serwera to 12 listopada 2012 11:00:00 PM (UTC) i sygnatura czasowa $ item_date jest 12 listopada 2012 22:30:00 (UTC) tak

użytkownika z (UTC) zobaczy $ item_date jak:

12 Nov 2012 10:30:00 PM

, a użytkownik z (+0800 GMT) ujrzy $ item_date jak:

13 Lis 2012 06:30:00 PM

jak mogę to zrobić? Dzięki

+0

Jeśli znasz strefę czasową użytkownika, możesz użyć 'date_default_timezone_set ('America/Los_Angeles');' – GBD

+0

, ale tylko ustawiając ją w jednej strefie chcę, aby była w stanie wykryć strefę użytkownika każdego typu, np. + 6gmt -8gmt itd. Wszystko to ... –

+0

Czy zapisałeś każdą strefę czasową użytkownika w DB? – GBD

Odpowiedz

20

Ten post został zaktualizowany do obejmują pełnoprawnym Przykład

<?php 
    session_start(); 

    if (isset($_POST['timezone'])) 
    { 
     $_SESSION['tz'] = $_POST['timezone']; 
     exit; 
    } 

    if (isset($_SESSION['tz'])) 
    { 
     //at this point, you have the users timezone in your session 
     $item_date = 1371278212; 

     $dt = new DateTime(); 
     $dt->setTimestamp($item_date); 

     //just for the fun: what would it be in UTC? 
     $dt->setTimezone(new DateTimeZone("UTC")); 
     $would_be = $dt->format('Y-m-d H:i:sP'); 

     $dt->setTimezone(new DateTimeZone($_SESSION['tz'])); 
     $is = $dt->format('Y-m-d H:i:sP'); 

     echo "Timestamp " . $item_date . " is date " . $is . 
      " in users timezone " . $dt->getTimezone()->getName() . 
      " and would be " . $would_be . " in UTC<br />"; 
    } 
?> 

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script> 
<script language="javascript"> 
    $(document).ready(function() { 
     <?php if (!isset($_SESSION['tz'])) { ?> 
      $.ajax({ 
       type: "POST", 
       url: "tz.php", 
       data: 'timezone=' + jstz.determine().name(), 
       success: function(data){ 
        location.reload(); 
       } 
      }); 

     <?php } ?>   
    }); 
</script> 

Mam nadzieję, że teraz jest to wystarczająco jasne;).

+0

Niestety jestem zdezorientowany, gdzie mogę umieścić $ item_date timestamp at? –

+1

zamiast czasu() w funkcji setTimestamp() dokładnie –

+1

. Przepraszam, że tu nie jestem. –