我正在构建一个简单的日期验证脚本,我只是偶然发现了一个大问题。
$correct_date = FALSE;
if ($legal_month == $month_wozero || $legal_month == $month_wzero) {
if ($legal_day == $day_wzero || $legal_day == $day_wozero) {
if ($legal_year == $year)
$correct_date = TRUE;
}
}
$ legal_day,$ legal_month,$ legal_year =用户输入
$ day_wozero / wzero,$ month_wozero / wzero,$ year =服务器时间
用户需要输入下订单的日期。但很明显,这与我设置脚本的方式无关。业务的位置距离服务器-2小时。但这并不重要,因为有人可以在美国的任何地方下订单。因此,如果他们在纽约,可能是第二天,而且在洛杉矶的业务,日期会有所不同。也可能是这个月的最后一天,纽约的月份与洛杉矶的情况也不同。
解决这个问题的唯一方法就是构建一个完整的if / else嵌套规则集,以便在特定时间调整时间和月份差异。但我几乎肯定必须有另一种解决方法,我不知道。
有什么建议吗?
答案 0 :(得分:3)
我会选择添加一个时区下拉列表并尝试使用JS为他们选择正确的下拉列表,以便您可以轻松地知道它是从客户端提供给您的。
在您的服务器上收到数据后,您应该使用此信息将用户日期转换为服务器的时区,并比较它们或创建一个服务器日期值,该值位于用户提供的时区中并检查。< / p>
示例强>
{{1}}
答案 1 :(得分:2)
您需要知道用户时区才能执行此操作。要么他们输入它(可靠但不是用户友好的),要么使用GeoIP lib。但是,GeoIP的可靠性较低,因为用户可能会隐藏在可能隐藏其IP的VPN或代理之后。
也许您也可以在JS端进行验证。这是可靠的(假设用户的系统时钟是正确的)但显然它不安全,所以这取决于你的用例。
答案 2 :(得分:1)
How can I obtain the local time in jQuery?
您可以随时在客户端幻灯片上获取当地时间和辩论日期,并在表单某处的隐藏输入类型中输入当前时间点。