2016-03-22 26 views
5

Zamanı, Laravel'de yerel saatte yazdırmak istiyorum. Kullanıcı bir yayın oluşturduğunda, oluşturulan zamanı sunucuda görüntüleyecektir. Yerel saatte nasıl görüntüleyebilirim? Yarattığım saati görüntülemek için bu kodu kullanılan benim bıçak dosyasındaLaravel'de sunucu saatini yerel saate nasıl dönüştürebilirim?

, bir sunucu zamanı veritabanında zaman, görüntüler

{{{ $posts->updated_at }}} 

. Kullanıcıları yerel saate nasıl dönüştürebilirim?

+0

Sizin temel seçenek 1) olan app.php sayfasında saat dilimi ayarları, saat dilimi hakkında daha iyi bilgi sahibi bu istemci tarafı, Do; cevabınızın bazı JSON'ta UTC zaman damgasını içermesini sağlayın ve yerel saatte bu zaman damgasını görüntülemek için Javascript yazın; 2) Sunucuya, kullanıcının hangi saat diliminde olduğunu (kendi başına biraz zor olabilir) söyleyin ve sunucuyu sunucu tarafında gerçekleştirin. –

cevap

2

bakınız. Geçerli saat dilimi ofseti, kullanıcı zamanını hesaplamak için oturumda saklanır. Kullanıcıları zaman dilimi ofsetini oturuma göndermek için bir jquery yayını işlevi oluşturun. Bu benim kod,

default.blade.php

@if($current_time_zone=Session::get('current_time_zone'))@endif 
<input type="hidden" id="hd_current_time_zone" value="{{{$current_time_zone}}}"> 
// For assigning session value to hidden field. 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     if($('#hd_current_time_zone').val() ==""){ // Check for hidden field is empty. if is it empty only execute the post function 
      var current_date = new Date(); 
      curent_zone = -current_date.getTimezoneOffset() * 60; 
      var token = "{{csrf_token()}}"; 
      $.ajax({ 
      method: "POST", 
      url: "{{URL::to('ajax/set_current_time_zone/')}}", 
      data: { '_token':token, curent_zone: curent_zone } 
      }).done(function(data){ 
     }); 
     }  
}); 

routes.php

Route::post('ajax/set_current_time_zone', array('as' => 'ajaxsetcurrenttimezone','uses' => '[email protected]')); 

HomeController olduğunu.php

public function setCurrentTimeZone(){ //To set the current timezone offset in session 
    $input = Input::all(); 
    if(!empty($input)){ 
     $current_time_zone = Input::get('curent_zone'); 
     Session::put('current_time_zone', $current_time_zone); 
    } 
} 

Yardımcılar/helper.php

function niceShort($attr) { 
    if(Session::has('current_time_zone')){ 
     $current_time_zone = Session::get('current_time_zone'); 
     $utc = strtotime($attr)-date('Z'); // Convert the time zone to GMT 0. If the server time is what ever no problem. 

     $attr = $utc+$current_time_zone; // Convert the time to local time 
     $attr = date("Y-m-d H:i:s", $attr); 
    } 
    return attr; 
} 

{{ niceShort($posts->updated_at) }} 

index.blade.php Şimdi istemciler saat diliminde yazdırabilirsiniz. Saat dilimi ayar kodu sadece oturum boş olduğunda çalışır.

0

bu deneyin:

$dt = new DateTime($posts->updated_at); 
$tz = new DateTimeZone('Asia/Kolkata'); // or whatever zone you're after 

$dt->setTimezone($tz); 
echo $dt->format('Y-m-d H:i:s'); 
+0

Bu kodu kullanarak, zamanı yalnızca GMT +5,30'a dönüştürebiliriz. Tarih, –

+0

numaralı herhangi bir yerde, dönüştürmek istediğiniz kullanıcı konumuna göre mi demek istiyorsunuz? –

+0

Evet @vipul sorathiya –

1

bu yöntemi deneyin, bu ne istediğini düşünüyorum: Burada

$localTime = $object->created_at->timezone($this->auth->user()->timezone); 

, $this->auth->user()->timezone geçerli kullanıcının dilimini döndürür ve timezone() kullanıcının etmek için created_at dönüştürecektir Yerel zaman.

Tüm ziyaretçileri zaman dilimi almak istiyorsanız (sadece oturum açmış değil), laravel-geoip benzeri Laravel için paketleyebilirsiniz.

$localTime = $object->created_at->timezone($visitor['timezone']); 
+0

Değişiklik yok, aynı zamanda görüntülenecek –

+0

Tam olarak nasıl? onu kullanmaya çalışıyor? Tam kodu gösterebilir misin? –

4

Sen javascript kullanarak bunu yapabilirsiniz: Böyle kullanabilirsiniz kendisi için bu $visitor['timezone'] üretecektir. Kullanım aşağıdaki kütüphaneler:

  1. moment.min.js (http://momentjs.com/downloads/moment.js)
  2. an-zaman dilimi-ile-data.js()
  3. jstz.min.js İşte

(http://pellepim.bitbucket.org/jstz/)

var update_at = '<?php echo $posts->updated_at;?>'; //set js variable for updated_at 
var serverTimezone = 'YOUR SERVER TIME ZONE'; //set js variable for server timezone 
var momentJsTimeObj = moment.tz(update_at, serverTimezone); //create moment js time object for server time 
var localTimeZone = jstz.determine(); //this will fetch user's timezone 
var localTime = momentJsTimeObj.clone().tz(localTimeZone.name()).format(); //convert server time to local time of user 

Şimdi js

aracılığıyla yerel saat gösterebilir: kodudur
2

En iyi seçenek bunu Javascript ile yapmak, istemcinin saat dilimini almak ve sunucu zamanını buna göre cleint'e dönüştürmektir.

Ben oturumu kullanarak yerel saatine dönüştürmek için bir çözüm buldu https://stackoverflow.com/a/1837243/4007628

-2

Yorum

//'timezone' => 'UTC', 
İlgili konular