2015-04-30 10 views
7

मैं एक साधारण दिनांक सत्यापन स्क्रिप्ट बना रहा हूं और मैं बस एक बड़ी समस्या पर ठोकर खाई।फॉर्म दिनांक सत्यापन समस्या

$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, $ साल = सर्वर समय

उपयोगकर्ता को उस तारीख को दर्ज करने की आवश्यकता होती है जिसमें उन्होंने आदेश दिया था। लेकिन स्पष्ट रूप से, यह कभी भी मेरी स्क्रिप्ट सेट करने के तरीके से काम नहीं करेगा। व्यवसाय का स्थान सर्वर से -2 घंटे है। लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि कोई भी संयुक्त राज्य अमेरिका में कहीं भी ऑर्डर दे सकता है। तो अगर वे न्यूयॉर्क में हैं, तो यह अगले दिन हो सकता है, और व्यापार एलए में है, तिथियां अलग-अलग होंगी। यह भी महीने का आखिरी दिन हो सकता है और न्यूयॉर्क में महीने एलए से अलग होगा।

इस के चारों ओर एक ही रास्ता में मेरे सिर अगर/किसी और नियमों का नेस्टेड सेट विशिष्ट समय पर समय और महीने के अंतर के लिए समायोजित करने के लिए एक पूरे के निर्माण के लिए है। लेकिन मुझे यकीन है कि इसके चारों ओर एक और तरीका होना चाहिए कि मुझे पता नहीं है।

कोई सुझाव?

+0

तारीख की आवश्यकता पूरी तरह से क्यों नहीं हटाते? – ceejayoz

+0

@ceejayoz मैं इस सवाल से पहले पूछने के बारे में सोच रहा था। लेकिन मैं एक साधारण समाधान की उम्मीद कर रहा हूं। – Sickest

उत्तर

2

ऐसा करने के लिए आपको उपयोगकर्ता समय क्षेत्र को जानने की आवश्यकता है। या तो आप उन्हें इनपुट (विश्वसनीय लेकिन उपयोगकर्ता के अनुकूल नहीं) इनपुट करने के लिए कहते हैं या आप GeoIP lib का उपयोग करते हैं। हालांकि GeoIP कम विश्वसनीय है क्योंकि उपयोगकर्ता वीपीएन या प्रॉक्सी के पीछे हो सकते हैं जो उनके आईपी को छुपा सकता है।

शायद आप जेएस-साइड पर भी सत्यापन कर सकते हैं। यह भरोसेमंद होगा (मान लें कि उपयोगकर्ता की सिस्टम घड़ी सही है) लेकिन जाहिर है कि यह सुरक्षित नहीं है, इसलिए यह आपके उपयोग-मामले पर निर्भर करता है।

3

मैं एक टाइमज़ोन ड्रॉपडाउन जोड़ने और जेएस का उपयोग करके उनके लिए सही एक का चयन करने का प्रयास करता हूं ताकि आप आसानी से सो सकें कि यह आपको क्लाइंट-साइड से प्रदान किया जा रहा है।

अपने सर्वर पर डेटा प्राप्त करने पर आपको या तो उपयोगकर्ता की तारीख को सर्वर के टाइमज़ोन में कनवर्ट करने के लिए या उन्हें तुलना करने या सर्वर-डेट मान बनाने के लिए इस जानकारी का उपयोग करना चाहिए जो उपयोगकर्ता द्वारा आपूर्ति किए गए टाइमज़ोन में है और उसके विरुद्ध जांचें।

उदाहरण

// We'll want this for later 
$server_timezone = date_default_timezone_get(); 

// Did the user supply a timezone and is it valid? 
if(
    $_POST['user_supplied_timezone'] !== '' && 
    date_default_timezone_set($_POST['user_supplied_timezone']) === TRUE 
) 
{ 
    // This accepts yyyy/m/d or yyyy/mm/dd formats 
    if(
     $_POST['user_year'] === date('Y') && 
     ($_POST['user_month'] === date('n') || $_POST['user_month'] === date('m')) && 
     ($_POST['user_day'] === date('j') || $_POST['user_day'] === date('d')) 
    ) 
    { 
     // TRUE 
    } 
} 

// It is officially "later" 
date_default_timezone_set($server_timezone); 
+0

मुझे नहीं लगता कि टाइमज़ोन ड्रॉप डाउन जोड़ना कुछ ऐसा है जो मैं इस समस्या को हल करने के लिए तैयार हूं। लेकिन यह बहुत अच्छा समाधान है। धन्यवाद – Sickest

+0

@ सबसे अच्छा आप इसे हमेशा '<इनपुट प्रकार = "छुपा" नाम = "user_supplied_timezone"> 'के रूप में जोड़ सकते हैं और यदि आप नहीं चाहते हैं कि उपयोगकर्ता इसके साथ गड़बड़ कर रहा हो तो जेएस मूल्य प्रदान करे। – MonkeyZeus

+0

@ अपनी समस्या को हल करने के साथ किसी भी भाग्य को सबसे अच्छा? – MonkeyZeus

1

How can I obtain the local time in jQuery?

तुम हमेशा स्थानीय समय और ग्राहक स्लाइड पर तारीख पर बहस हो सकता है और फार्म पर कहीं न कहीं एक छिपा इनपुट प्रकार में मौजूदा timezoned समय दर्ज ।

संबंधित मुद्दे