मेरा अनुसरण है
$var = "2010-01-21 00:00:00.0"
मैं आज की तारीख के मुकाबले इस तारीख की तुलना करना चाहता हूं (यानी मैं यह जानना चाहूंगा कि यह $var
आज से पहले है या आज के बराबर है या नहीं)
मुझे किस फ़ंक्शन का उपयोग करने की आवश्यकता होगी?
मेरा अनुसरण है
$var = "2010-01-21 00:00:00.0"
मैं आज की तारीख के मुकाबले इस तारीख की तुलना करना चाहता हूं (यानी मैं यह जानना चाहूंगा कि यह $var
आज से पहले है या आज के बराबर है या नहीं)
मुझे किस फ़ंक्शन का उपयोग करने की आवश्यकता होगी?
जवाबों:
strtotime($var);
इसे समय मूल्य में बदल देता है
time() - strtotime($var);
आप सेकंड के बाद से देता है $var
if((time()-(60*60*24)) < strtotime($var))
जांच करेगा कि क्या $var
आखिरी दिन के भीतर है।
यह प्रारूप एक मानक स्ट्रिंग तुलना उदाहरण के लिए पूरी तरह से उपयुक्त है
if ($date1 > $date2){
//Action
}
उस प्रारूप में आज की तारीख पाने के लिए, बस उपयोग करें date("Y-m-d H:i:s")
:।
इसलिए:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {}
यह उस प्रारूप की सुंदरता है: यह अच्छी तरह से आदेश देता है। बेशक, आपकी सटीक परिस्थितियों के आधार पर, यह कम कुशल हो सकता है, लेकिन यह पूरी तरह से अधिक सुविधाजनक भी हो सकता है और अधिक रख-रखाव कोड को जन्म दे सकता है - हमें वास्तव में उस निर्णय को कॉल करने के लिए अधिक जानने की आवश्यकता होगी।
सही समयक्षेत्र के लिए, आप उपयोग कर सकते हैं, उदाहरण के लिए,
date_default_timezone_set('America/New_York');
उपलब्ध PHP Timezones को संदर्भित करने के लिए यहां क्लिक करें ।
mm/dd/yyyy
प्रारूप में दो दिनांक समय स्ट्रिंग्स को दिनांक में परिवर्तित करने और फिर इसकी तुलना करने की कोशिश करने से अधिक तेज़ है । यह हमेशा मुझे चिंतित करता है जब डेवलपर्स के पास अपने सिस्टम में कई समय क्षेत्र में तारीखें होती हैं। मुझे लगता है कि आपके सिस्टम में तिथियों को स्टोर करना बेहतर होता है, हमेशा सिंगल टाइम ज़ोन में और फिर जो भी टाइमज़ोन आवश्यक हो उसे प्रदर्शित करें। मैंने 1998 के आसपास yyyy-mm-dd
प्रारूप (या yyyymmdd
) का उपयोग करना शुरू किया जब मुझे एहसास हुआ कि यह एसक्यूएल सर्वर में भी बहुत तेज है।
हेयर यू गो:
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime('today'));
}
isToday('2010-01-22 00:00:00.0'); // true
इसके अलावा, कुछ और सहायक कार्य:
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
और वह मेरे लिए किया।
BoBby Jack को पूरा करने के लिए, DateTime OBject का उपयोग, यदि आपके पास 5.2.2+ है:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
आप DateTime
वर्ग का उपयोग कर सकते हैं :
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-01-01 00:00:00");
तुलना ऑपरेटर काम *:
var_dump($past < $now); // bool(true)
var_dump($future < $now); // bool(false)
var_dump($now == $past); // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future); // bool(false)
var_dump($past > $now); // bool(false)
var_dump($future > $now); // bool(true)
डेटाइम वस्तुओं से टाइमस्टैम्प मूल्यों को पकड़ना और उनकी तुलना करना भी संभव है:
var_dump($past ->getTimestamp()); // int(1262286000)
var_dump($now ->getTimestamp()); // int(1431686228)
var_dump($future->getTimestamp()); // int(1577818800)
var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
* ध्यान दें कि ===
दो अलग-अलग डेटाइम ऑब्जेक्ट्स की तुलना करते हुए भी जब वे एक ही तारीख का प्रतिनिधित्व करते हैं, तो गलत रिटर्न देता है।
$future
अतीत बन गया है। : पी
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today) > strtotime($expiry)); //false or true
$var
ओपी में भी मेरी बराबरी नहीं है
मेरे अनुभव के आधार पर एक सावधानी, यदि आपके उद्देश्य में केवल तारीख शामिल है तो टाइमस्टैम्प को शामिल करने के लिए सावधान रहें । उदाहरण के लिए, आज कहते हैं "2016-11-09"
। टाइमस्टैम्प से जुड़े तुलना यहाँ तर्क को शून्य कर देगी। उदाहरण,
// input
$var = "2016-11-09 00:00:00.0";
// check if date is today or in the future
if ( time() <= strtotime($var) )
{
// This seems right, but if it's ONLY date you are after
// then the code might treat $var as past depending on
// the time.
}
उपरोक्त कोड सही लगता है, लेकिन यदि यह केवल वह दिनांक है जिसकी आप तुलना करना चाहते हैं, तो, उपरोक्त कोड सही तर्क नहीं है। क्यों? क्योंकि, समय () और स्ट्रैटोटाइम () टाइमस्टैम्प को शामिल करेगा। यही है, भले ही दोनों तिथियां एक ही दिन पड़ती हैं, लेकिन समय में अंतर मायने रखेगा। नीचे दिए गए उदाहरण पर विचार करें:
// plain date string
$input = "2016-11-09";
क्योंकि इनपुट सादा दिनांक स्ट्रिंग है, इस strtotime()
पर प्रयोग करके $input
यह मान लिया जाएगा कि यह 2016-11-09 की मध्यरात्रि है। इसलिए, time()
आधी रात के बाद कभी भी दौड़ना हमेशा $input
अतीत के रूप में माना जाएगा , भले ही वे एक ही दिन हों।
इसे ठीक करने के लिए, आप बस इस तरह कोड कर सकते हैं:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
कुछ वर्षों बाद, मैं बॉबी जैक का दूसरा निरीक्षण करता हूं जो पिछले 24 घंटे आज नहीं है !!! और मुझे आश्चर्य है कि जवाब बहुत उखाड़ा गया ...
यह सुनिश्चित करने के लिए कि एक निश्चित तारीख कम है, बराबर या किसी अन्य से अधिक है, पहले आपको दिन की शुरुआत करने के लिए उन्हें "नीचे" चालू करना होगा। दूसरे शब्दों में, सुनिश्चित करें कि आप दोनों तिथियों में समान 00:00:00 समय के बारे में बात कर रहे हैं। यह बस और सुरुचिपूर्ण ढंग से किया जा सकता है:
strtotime("today") <=> strtotime($var)
अगर $var
ओपी निर्दिष्ट की तरह 00:00:00 पर समय भाग है।
<=>
आपको जो कुछ भी ज़रूरत है उसे बदलें (या इसे php 7 में इस तरह रखें)
इसके अलावा, जाहिर है, हम दोनों के लिए एक ही समयक्षेत्र के बारे में बात कर रहे हैं। समर्थित समयक्षेत्रों की सूची के लिए
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(w3schools उदाहरण, यह सही काम करता है)
जोशुआ के उत्तर पर w3schools से विस्तार:
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);
//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);
//now compare the two dates
if ($intDiff > 0) {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}
आशा है कि ये आपकी मदद करेगा। Stackoverflow पर मेरी पहली पोस्ट!
दिनांक समय वस्तुओं की तुलना करें:
(मैंने 10 दिन चुने - 10 दिन से अधिक पुरानी कोई भी चीज "OLD" है, बाकी "NEW")
$now = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
echo "OLD! " . $yourdate->format('m/d/Y');
}else{
echo "NEW! " . $yourdate->format('m/d/Y');
}
कुछ दिए गए उत्तर वर्तमान दिन को ध्यान में नहीं रखते हैं!
यहाँ मेरा प्रस्ताव है।
$var = "2010-01-21 00:00:00.0"
$given_date = new \DateTime($var);
if ($given_date == new \DateTime('today')) {
//today
}
if ($given_date < new \DateTime('today')) {
//past
}
if ($given_date > new \DateTime('today')) {
//future
}
यदि आप समय के साथ काम करते हैं और कार्बन का उपयोग करते हैं आप सबसे अच्छे दोस्त हैं;
पैकेज स्थापित करें:
$theDay = Carbon::make("2010-01-21 00:00:00.0");
$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))
lt = से कम, gt = से अधिक
प्रश्न के रूप में:
$theDay->gt(Carbon::today()) ? true : false;
और भी बहुत कुछ;