diff --git a/erpnext/www/book-appointment/index.py b/erpnext/www/book-appointment/index.py
index 49b3ffc..5f51ced 100644
--- a/erpnext/www/book-appointment/index.py
+++ b/erpnext/www/book-appointment/index.py
@@ -1,6 +1,7 @@
 import frappe
 import datetime
 import json
+import pytz
 
 
 WEEKDAYS = ["Monday", "Tuesday", "Wednesday",
@@ -24,20 +25,26 @@
 @frappe.whitelist(allow_guest=True)
 def get_timezones():
     timezones = frappe.get_list('Timezone', fields='*')
-    return timezones
+    return pytz.all_timezones
 
 
 @frappe.whitelist(allow_guest=True)
 def get_appointment_slots(date, timezone):
-    timezone = int(timezone)
+    import pytz
+    guest_timezone = pytz.timezone(timezone)
     format_string = '%Y-%m-%d %H:%M:%S'
     query_start_time = datetime.datetime.strptime(
         date + ' 00:00:00', format_string)
     query_end_time = datetime.datetime.strptime(
         date + ' 23:59:59', format_string)
-    query_start_time = _convert_to_ist(query_start_time, timezone)
-    query_end_time = _convert_to_ist(query_end_time, timezone)
+    local_timezone = frappe.utils.get_time_zone()
+    local_timezone = pytz.timezone(local_timezone)
+    query_start_time = guest_timezone.localize(query_start_time)
+    query_end_time = guest_timezone.localize(query_end_time)
+    query_start_time = query_start_time.astimezone(local_timezone)
+    query_end_time = query_end_time.astimezone(local_timezone)
     now = datetime.datetime.now()
+    # now = local_timezone.localize(now)
     # Database queries
     settings = frappe.get_doc('Appointment Booking Settings')
     holiday_list = frappe.get_doc('Holiday List', settings.holiday_list)
@@ -47,18 +54,22 @@
     # Filter timeslots based on date
     converted_timeslots = []
     for timeslot in timeslots:
+        timeslot = local_timezone.localize(timeslot)
+        print(timeslot)
+        timeslot = timeslot.astimezone(guest_timezone)
+        timeslot = timeslot.replace(tzinfo=None)
         # Check if holiday
         if _is_holiday(timeslot.date(), holiday_list):
             converted_timeslots.append(
-                dict(time=_convert_to_tz(timeslot, timezone), availability=False))
+                dict(time=timeslot, availability=False))
             continue
         # Check availability
         if check_availabilty(timeslot, settings) and timeslot >= now:
             converted_timeslots.append(
-                dict(time=_convert_to_tz(timeslot, timezone), availability=True))
+                dict(time=timeslot, availability=True))
         else:
             converted_timeslots.append(
-                dict(time=_convert_to_tz(timeslot, timezone), availability=False))
+                dict(time=timeslot, availability=False))
     date_required = datetime.datetime.strptime(
         date + ' 00:00:00', format_string).date()
     converted_timeslots = filter_timeslots(date_required, converted_timeslots)
@@ -133,18 +144,4 @@
 
 def _datetime_to_deltatime(date_time):
     midnight = datetime.datetime.combine(date_time.date(), datetime.time.min)
-    return (date_time-midnight)
-
-def _convert_to_ist(datetime_object, timezone):
-    offset = datetime.timedelta(minutes=timezone)
-    datetime_object = datetime_object + offset
-    offset = datetime.timedelta(minutes=-330)
-    datetime_object = datetime_object - offset
-    return datetime_object
-
-def _convert_to_tz(datetime_object, timezone):
-    offset = datetime.timedelta(minutes=timezone)
-    datetime_object = datetime_object - offset
-    offset = datetime.timedelta(minutes=-330)
-    datetime_object = datetime_object + offset
-    return datetime_object
\ No newline at end of file
+    return (date_time-midnight)
\ No newline at end of file
