4

I'm saving date in UTC. I wan't to change that date to automatic user timezone.

my settings

USE_TZ = True

my template

{% for sale in sales %}
    date : {{sale.date}}
{% endfor %}

I tried django-tz-detect

https://github.com/adamcharnock/django-tz-detect

but I can't implement that correctly.

Please suggest a good way to solve this issue.

Rohan
  • 52,392
  • 12
  • 90
  • 87
SAFEER N
  • 1,157
  • 2
  • 17
  • 30
  • Are we dealing with User objects here? As in, could we store their timezones in their profile? It would be simpler and likely more accurate than trying to detect it. – Tom Carrick May 10 '14 at 18:22

1 Answers1

2

I got a solution from here

I created a view function

@login_required 
@ajax_required
@require_GET
def set_user_timezone(request): 
    timezone = request.GET.get('timezone')
    request.session["set_user_timezone"] = timezone
    response_data = {}
    response_data['status'] = 'true'
    response_data['message'] = 'user timezone set successfully.'
    return HttpResponse(json.dumps(response_data), mimetype='application/javascript')

context

if "set_user_timezone" in request.session:
    user_session_ok = True
    user_time_zone = request.session['set_user_timezone']
else:
    user_session_ok = False
    user_time_zone = "Asia/Kolkata"

in my base template

{% if not user_session_ok %}
    <script type="text/javascript" src="{% static 'js/jstz.js' %}"></script>
    <script>
        $(document).ready(function(){
             var timezone = jstz.determine();
             var timezone_name = timezone.name();
             $.ajax({
                url : '/set-user-timezone/',
                action : "GET",
                data : {
                    timezone : timezone_name
                },
                success : function(data){

                },
                error : function(data){

                }
             })
        });
    </script>
{% endif %}

my sales template

{% for sale in sales %}
    {% load tz %}                       
    date : {{ sale.sale_date|timezone:user_time_zone }}         
{% endfor %}

I don't know this is the correct method. but this solution works for me.

SAFEER N
  • 1,157
  • 2
  • 17
  • 30