2015-07-09 4 views
5

मेरे पास वाउचर सिस्टम है, जहां मैं एक समय या तारीख के साथ एक तिथि दर्ज कर सकता हूं। इस लोगों को उदाहरण के लिए, सभी वैध प्रारूप की अनुमति होनी चाहिए:स्ट्रेटोटाइम: समय के लिए जांचें

  • 01.01.2016
  • 01.01.2016 00:00:00

यह मुझे कोई समस्या नहीं है, अगर मैं शुरुआत वाउचर के लिए दिनांक, लेकिन यह एक समस्या है यदि मेरे पास समाप्ति दिनांक था। मैं उपयोगकर्ता इनपुट को यूनिक्स टाइमस्टैंप में बदलने के लिए strtotime का उपयोग करता हूं।

यदि आप समाप्ति दिनांक के रूप में दिनांक दर्ज करते हैं, तो यह दिन का अंत होना चाहिए। इस तरह:

01.01.2016 -> 01.01.2016 23:59:59 -> 1451689199 

लेकिन - strtotime01.01.2016 और 01.01.2016 00:00:00 के लिए निश्चित रूप से एक ही टाइमस्टैम्प रिटर्न - और यह मेरी समस्या है। और जब उपयोगकर्ता एक समय में प्रवेश करता है, तो इस बार निश्चित रूप से उपयोग किया जाना चाहिए। कि strtotime द्वारा परिवर्तित किया जाता है - - एक समय में यह स्पष्ट है

01.01.2016 
1451602800 
-> should go to 1451689199 

01.01.2016 00:00:00 
1451602800 
-> is correct 

01.01.2016 23:59:59 
1451689199 
-> is correct 

मैं अगर स्ट्रिंग की जाँच करने के लिए एक संभावना की जरूरत है। मैंने सफलता के बिना इसके लिए एक फ़ंक्शन की खोज की, यहां तक ​​कि DateTime कक्षा के लिए इस के लिए कोई तरीका नहीं है (hasTime() या ऐसा कुछ)।

जैसा कि मैंने पहले कहा था, सभी दिनांक/समय प्रारूप strtotime समर्थन इस फ़ंक्शन द्वारा भी समर्थित होना चाहिए।

यह प्रश्न डुप्लिकेट नहीं है! मैं यह जांचना चाहता हूं कि क्या निर्दिष्ट समय स्पष्ट है या नहीं। सवाल जो डुप्लिकेट होना चाहिए PHP शुरुआती लोगों के लिए एक बुनियादी सवाल है और इस समस्या से बिल्कुल कुछ नहीं करना है!

उत्तर

1

मैं strtotime कॉल करने से पहले स्ट्रिंग की लंबाई का परीक्षण करने और 23:59:59 जोड़ेंगे:

$dates = array('01.01.2016','01.01.2016 23:59:59','01.01.2016 10:25:30'); 
foreach($dates as $date) { 
    echo "date=$date\n"; 
    if (strlen($date) > 10) { 
     echo strtotime($date),"\n"; 
    } else { 
     echo strtotime($date . ' 23:59:59'),"\n"; 
    } 
} 

आउटपुट:

date=01.01.2016 
1451689199 
date=01.01.2016 23:59:59 
1451689199 
date=01.01.2016 10:25:30 
1451640330 
+0

यह एक विचार है ;-) मैं इसे जांचूंगा: -) – Richard

0

'2015031' या का इनपुट दिया गया है, तो आप मूल रूप से पहले प्रयास कर सकते हैं, अगर यह झूठी वापसी करता है तो दूसरा प्रयास करें।

मजबूती पर कोई गारंटी हालांकि

php > var_dump(DateTime::createFromFormat('Ymd H:s','2015031')); 
bool(false) 
php > var_dump(DateTime::createFromFormat('Ymd H:s','2015031 10:29')); 
object(DateTime)#1 (3) { 
    ["date"]=> 
    string(26) "2015-03-01 10:00:29.000000" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(3) "UTC" 
} 

जाहिर है अपनी आवश्यकताओं के प्रारूप बदल रहा है और ->getTimestamp साथ टीएस निकालने।

+0

असल में, इस प्रारूप को मान्य करने के लिए एक अच्छा विचार है?। लेकिन फिर, मुझे सभी [डेटटाइम प्रारूप PHP जानता है] को लागू करना है (http://php.net/manual/en/datetime.formats.php) ... – Richard

0

आप DateTime वर्ग इस बात के लिए इस्तेमाल कर सकते हैं।

  1. दिनांक समय वर्ग
  2. सेट टाइमस्टैम्प
  3. बनाएं चेक समय
  4. तो समय 0:00:00 है, 1 दिन शून्य से 1 दूसरे

इस का उदाहरण जोड़ें:

<?php 

    $dates = array(
     '01.01.2016', 
     '01.01.2016 00:00:00', 
     '01.01.2016 00:10:00', 
     '01.01.2016 23:59:59', 
     'Jan 1st 2016', 
     'Jan 1st 2016 00:00:00', 
     'Jan 1st 2016 00:10:00', 
     'Jan 1st 2016 11:59:59 pm', 
     '01/01/2016', 
     '01/01/2016 00:00:00', 
     '01/01/2016 00:10:00', 
     '01/01/2016 23:59:59', 
     '2016-01-01 00:00:00', 
     '2016-01-01 00:10:00', 
     '2016-01-01 23:59:59', 
    ); 
    $timestamps = array(); 

    foreach($dates as $date) { 
     $timestamp = strtotime($date); 

     $DateTime = new DateTime(); 
     $DateTime->setTimestamp($timestamp); 

     if($DateTime->format('H:i:s') === '00:00:00') { 
      $timestamp = strtotime($date . ' + 1 day - 1 second'); 
     } 
     $timestamps[] = $timestamp; 
    } 

$timestamps का आउटपुट:

Array 
(
    [0] => 1451710799 
    [1] => 1451710799 
    [2] => 1451625000 
    [3] => 1451710799 
    [4] => 1451710799 
    [5] => 1451710799 
    [6] => 1451625000 
    [7] => 1451710799 
    [8] => 1451710799 
    [9] => 1451710799 
    [10] => 1451625000 
    [11] => 1451710799 
    [12] => 1451710799 
    [13] => 1451625000 
    [14] => 1451710799 
) 
+0

हां, लेकिन समस्या यह है कि मैं जानना चाहता हूं कि एक समय निर्धारित किया गया है या नहीं। क्या होगा यदि कोई व्यक्ति 00:00:00 बजे स्पष्ट समय निर्धारित करता है? ;-) डिफ़ॉल्ट को अन्य शब्दों के साथ 00:00:00 लेकिन 23:59:59 नहीं होना चाहिए। – Richard

0

आपके प्रदत्त टाइमस्टैम्प के आधार पर, इनपुट के रूप में लिया गया यूनिक्स युग रूपांतरण सभी जीएमटी समय में हैं। यदि ऐसा है तो आप gmdate फ़ंक्शन का उपयोग करके स्पष्ट रूप से निर्धारित समय की मूल जांच करने का प्रयास कर सकते हैं, यह मानते हुए कि यदि उनके पास मूल्य हैं, तो यह उपयोगकर्ता द्वारा संशोधित टाइमस्टैम्प है।

यदि नहीं, टाइमस्टैम्प संशोधित किया जा सकता है और 23 घंटे, 59 मिनट, 59 सेकंड शेष राशि को तिथि में जोड़ा जा सकता है।

<?php 
    $unixstamp = '1451520000'; // Thu, 31 Dec 2015 00:00:00 GMT 
    $day = gmdate('Y-m-d', $unixstamp); // 2015-12-31 
    $hour = (int)gmdate('H', $unixstamp); // 0 
    $minute = (int)gmdate('i', $unixstamp); // 0 

    //check if hours or minutes have been set explicitly 
if($hour > 0 || $minute > 0){ 
    //User Modified Time 
    echo gmdate("c",$unixstamp); 

} else { 
    //here add the 23 hours and 59 minutes on and return as date object 
    echo gmdate("c", strtotime('+23 hours + 59 minutes + 59 seconds', $unixstamp)); 

    //here add the 23 hours and 59 minutes on and return as unix epoch timestamp 
    $endofday = gmdate("U", strtotime('+23 hours + 59 minutes + 59 seconds', $unixstamp)); 
} 
?> 

समय क्षेत्र निश्चित रूप से एक विचार है, लेकिन इसके बाद के संस्करण कोड स्पष्ट रूप से सेट समय के लिए एक जीएमटी यूनिक्स टाइमस्टैम्प की जाँच करेगा।

+0

हां, लेकिन समस्या यह है कि मैं जानना चाहता हूं कि एक समय निर्धारित किया गया है या नहीं। क्या होगा यदि कोई व्यक्ति 00:00:00 बजे स्पष्ट समय निर्धारित करता है? ;-) डिफ़ॉल्ट को अन्य शब्दों के साथ 00:00:00 लेकिन 23:59:59 नहीं होना चाहिए। – Richard

+0

ठीक है तो आप उपयोगकर्ता अंत में समय बदलना चाहते हैं? उपयोगकर्ता इंटरफ़ेस को अंतिम तिथि दर्ज करने के लिए क्या विधि है? गीले समय पर फीडबैक के लिए मैं आपके सामने के अंत को देखता हूं स्पष्ट रूप से सेट किया गया था। – RepeatQuotations

+0

मेरे पास अभी दिनांक/समय के लिए एक टेक्स्ट फ़ील्ड है और 'strtotime' के साथ दर्ज मूल्य को पार्स करने का प्रयास करें। बेशक, मैं एक दिनांक चयनकर्ता को एकीकृत कर सकता हूं ... – Richard

0

डिफ़ॉल्ट रूप से, सभी टाइमस्टैम्प में समय शामिल होता है, भले ही यह सेट न हो, यह 00:00:00 होगा।

तो इस मामले में, आप कुछ इस तरह कर सकता है:

<?php 

$notime = 1420070400; 
$withtime = 1420110000; 


$time = date("H:i:s", $withtime); 

if($time == "00:00:00") { 
    echo "time not set"; 
} else { 
    echo "time set"; 
} 

>

+0

हां, लेकिन समस्या यह है कि मैं जानना चाहता हूं कि एक समय निर्धारित किया गया है या नहीं। डिफ़ॉल्ट रूप से अन्य शब्दों के साथ यह कहने के लिए 00:00:00 लेकिन 23:59:59 नहीं होना चाहिए। – Richard

+0

उस मामले में यदि उपयोगकर्ता द्वारा समय निर्धारित किया गया था या नहीं तो फ़ॉर्म सबमिट करते समय आप केवल एक बूलियन प्राप्त कर सकते थे। यदि नहीं तो 00:00:00 के साथ 23:59:59 को प्रतिस्थापित करें – eselskas

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