如何解决单击日历日期后,如何显示准确的事件?
我正在尝试获取用户在日历上单击的任何日期的事件。
当您单击某个日期(例如8/15)时,该日期将通过ajax作为字符串(yyyy-mm-dd)发送到服务器,并使用该日期的事件更新页面上的div:
$.ajax({
type: "GET",url: "{% url 'update-home' %}",data: {'send_date': send_date},success: function(response) {
console.log(response)
$('#events').show().fadeOut(50,function() {
$('#events').html(response).fadeIn(50);
});
},error: function(rs,e) {
alert('Something went wrong.');
}
});
这正常工作。我像这样从服务器提取事件:
def update_home_ajax(request):
the_date = request.GET['send_date']
events = Event.objects.filter(start_time__startswith=the_date).filter(is_private=False).filter(is_deleted=False).exclude(event_type="convention").order_by("-created_date")
从某种意义上说,它可以在用户单击日期拉出所有事件。但是,我的问题是被拉出的事件保存在UTC中。例如,如果EST中的用户单击8/16在01:00(凌晨1点),则会发生错误的查询集,那么实际上该事件实际上是在8/15的21:00返回的,因此无法正确过滤。
我尝试将查询集转换为用户时区,但是当我第一次从数据库中提取事件时,我仍然会错过一些事件。
我在网站上转换为用户的时区没有问题。仅当我尝试根据用户单击的日期更新事件div时,该日期才会发送到服务器以更新事件。
如果我存储为UTC并且每个用户都有指定的时区,如何确保我从数据库中提取准确反映预期日期的事件?
解决方法
您发送到服务器的日期必须包括其所在的时区,以便服务器可以将其正确地转换为UTC的时间范围,并使用该范围查询数据库。要么,要么将日期转换为UTC,然后再将其发送到服务器-在这种情况下,您可能最终会向服务器发送开始日期和结束日期时间,因为,例如,美国东部时间8月15日这24小时转换UTC时跨2天的部分时间,因此仅凭单个日期不足以描述所需的时间范围。
我认为,不管您采用哪种方式,都没有关系-在发送之前或之后进行转换。只要服务器知道期望什么,它就可以工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。