表格日期验证问题

Sic*_*est 7 php forms timezone date

我正在构建一个简单的日期验证脚本,我只是偶然发现了一个大问题.

$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;
    }
}
Run Code Online (Sandbox Code Playgroud)

$ legal_day,$ legal_month,$ legal_year =用户输入

$ day_wozero/wzero,$ month_wozero/wzero,$ year =服务器时间

用户需要输入他们下订单的日期.但很明显,这与我设置脚本的方式无关.业务的位置距离服务器-2小时.但这并不重要,因为有人可以在美国的任何地方下订单.因此,如果他们在纽约,可能是第二天,而且在洛杉矶的业务,日期会有所不同.也可能是这个月的最后一天,纽约的月份与洛杉矶的情况也不同.

解决这个问题的唯一方法就是构建一个完整的if/else嵌套规则集,以便在特定时间调整时间和月份差异.但我几乎肯定必须有另一种解决方法,我不知道.

有什么建议?

lau*_*ent 2

您需要知道用户时区才能执行此操作。要么让他们输入(可靠但不方便用户),要么使用GeoIP库。然而,GeoIP 不太可靠,因为用户可能位于可能隐藏其 IP 的 VPN 或代理后面。

也许你也可以在 JS 端进行验证。这将是可靠的(假设用户的系统时钟是正确的),但显然它不安全,所以这取决于您的用例。