Symfony 3从用户那里获取时区,而不是以

时间:2018-04-03 13:27:47

标签: javascript symfony datetime timezone twig

我有一个宣布网站,目前,我有一个订阅表单,要求用户给我他的时区

$builder->add('timezone', ChoiceType::class, array(
                'choices' => $choices
            ));

但我想直接更改并获取此信息,而无需在表单中询问用户。

这对我很重要,因为我会有很多用户肯定不知道他们的时区,会选择一个糟糕的时区。

实际上,我已经宣布谁是以GMT时区为约会的商店,但我想在我的网站上显示一个已注册或未的人。

显示我有两个功能:

{{ clanwar.rendezvous|localizeddate('full', 'short') }}
{{ clanwar.rendezvous|date("d F Y, G:i e P", user.timezone)}}

第一个使用默认时区给出日期,它从服务器获取时区。 (我可以通过手动定义来改变) 第二个需要有注册用户的时区。

所以这两个选项都不能用于我想做的事情。

我想我需要使用Javascript函数。我想在会话中存储用户时区,并使用此信息计算所有日期。 但我找不到一个能找到这个元素的好函数。

你知道什么可以帮助我吗? 感谢

1 个答案:

答案 0 :(得分:2)

{{ clanwar.rendezvous|date("d F Y, G:i e P", user.timezone)}}

通过这种方式,您显然需要将时区存储在User实体或类似的东西中。但这很容易发生变化,因为用户可能倾向于旅行/移动,因此每次更改时区时可能不会那么严格。

我建议用例如带有特殊类的<div>元素以UTC格式显示ISO格式的日期:

<div class="user_timezone_container">{{ clanwar.rendezvous|localizeddate('full', 'short') }}</div>

然后做一些JS脚本:

$('.user_timezone_container').each(function(){
    var m = moment($(this).text()); //example: "2018-04-03T09:30:26Z"

    $(this).text(m.local().format('YYYY-MM-DD HH:mm:ss'));
})

我从SO问题Moment Js UTC to Local Time

中拼凑了上面的例子

显然,你不需要jQuery而不是MomentJS,但为了方便我在这里使用它们......