2012-11-12 28 views
7

sto tirando il generato informazioni mysql timestamp grezzo di $ item_date dal database come formato della data php:PHP Data timestamp al fuso orario dell'utente

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

uscita folowwing la zona del server (UTC):

12 nov 2012 17:54:11

ma lo voglio convertire in base al fuso orario dell'utente

Esempio: diciamo se l'ora dell'utente è 13 nov 2012 07:00:00 AM (+0800 GMT) e l'ora del server è 12 nov 2012 11:00:00 PM (UTC) e il timestamp di $ item_date è 12 nov 2012 10:30:00 (UTC) modo

utente con (UTC) vedrà $ item_date come:

12 nov 2012 10:30:00

e l'utente con (0800 GMT) vedrà $ item_date come:

13 nov 2012 18:30:00

Come faccio ad avere fatto? Grazie

+0

Se si conosce il fuso orario dell'utente, è possibile utilizzare 'date_default_timezone_set ('America/Los_Angeles');' – GBD

+0

ma che è solo impostandolo su una zona voglio che sia in grado di rilevare la zona dell'utente di tutti i tipi come + 6gmt -8gmt ecc. Tutto ... –

+0

hai memorizzato il fuso orario di ciascun utente nel DB? – GBD

risposta

20

Questo post è stato aggiornato per includere un vero e proprio esempio

<?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> 

Spero che questo sia ormai chiaro sufficiente;).

+0

Scusa se sono confuso, dove metto il $ item_date timestamp presso? –

+1

invece di time() nella funzione setTimestamp() –

+1

esattamente. Mi dispiace per non essere chiaro qui. –

Problemi correlati