दो कार्बन टाइमस्टैम्प की तुलना कैसे करें?


84

मेरे पास दो टाइमस्टैम्प हैं, edit_at जो मैंने बनाया और create_at (Laravel's) ... डेटाबेस में, दोनों का टाइमस्टैम्प और डिफ़ॉल्ट मान 0000-00-00 00:00:00 है ... लेकिन

var_dump(edited_at variable)तार दे रहा है। जबकि var_dump(created_at variable)वस्तु / कार्बन है। इन टाइमस्टैम्प में क्या गलत है?

मुझे प्रारूप ('यू') का उपयोग करके पूर्णांक में परिवर्तित होने के बाद दोनों की तुलना करनी होगी। मैं केवल कार्बन ऑब्जेक्ट पर इस पद्धति को कॉल कर सकता हूं। मैं उसे कैसे कर सकता हूँ?


आप वास्तव में क्या तुलना करना चाहते हैं? क्या आप जानना चाहते हैं कि कौन पुराना / नया है?
लुकासगेटर

हां, मैं पुराने / नए का प्रचार करना चाहता हूं
हसन साकिब

जवाबों:


196

सबसे पहले, एलोकेंट अपने आप इसे टाइमस्टैम्प ( created_at, updated_at) को कार्बन ऑब्जेक्ट में परिवर्तित करता है। आप updated_atउस अच्छी सुविधा को पाने के लिए या संपत्ति edited_atमें अपने मॉडल में निर्दिष्ट करने के लिए उपयोग कर सकते $datesहैं:

protected $dates = ['edited_at'];

अब वापस अपने वास्तविक प्रश्न पर। कार्बन में तुलनात्मक कार्यों का एक समूह है:

  • eq() बराबरी
  • ne() नहीं के बराबर है
  • gt() से अधिक
  • gte() से अधिक या बराबर
  • lt() से कम
  • lte() से कम या बराबर

उपयोग:

if($model->edited_at->gt($model->created_at)){
    // edited at is newer than created at
}

2
मैं केवल तारीखों की तुलना कैसे कर सकता हूं और समय नहीं?
जेकब

3
@geckob सबसे आसान शायद करना है$date1->toDateString() == $date2->toDateString()
lukasgeiter

मैं परीक्षण कर रहा हूं और कार्बन ऑब्जेक्ट्स की तुलना करने के लिए तुलना ऑपरेटरों का उपयोग करना संभव है। क्या यह एक नई विशेषता है?
JCarlosR

इसका उपयोग करते समय, अशक्त टाइमस्टैम्प को संभालना याद रखें। लारवेल सिर्फ कार्बन ऑब्जेक्ट के बजाय SQL nullको PHP में बदल देगा null, और आपको मिल जाएगा call to a member function lt() on null
ओकेडिट

आपको इच्छित कार्य के लिए $ कार्यों के लिए $ some_cabron_date-> endOfDay () या $ some_cabron_date-> startOfDay () का उपयोग करना चाहिए
विलियन लोपेज

21

कार्बन में ममनिक नामों के साथ तुलनात्मक कार्यों का एक समूह है :

  • के बराबर()
  • बराबर नही है()
  • से अधिक()
  • इससे बड़ा या इसके बराबर()
  • से कम()
  • से कम या बराबर()

उपयोग:

 if($model->edited_at->greaterThan($model->created_at)){
     // edited at is newer than created at
 }

नेस्बॉट / कार्बन के लिए मान्य 1.36.2

यदि आप सुनिश्चित नहीं हैं कि आप किस कार्बन संस्करण पर हैं, तो इसे चलाएं

$composer show "nesbot/carbon"

प्रलेखन: https://carbon.nesbot.com/docs/#api-comparison


3

सबसे पहले, इस उत्तर में वर्णित के रूप में अंतर्निहित कार्यक्षमता का उपयोग करके टाइमस्टैम्प में परिवर्तित करें ।

तब आप तुलना के लिए कार्बन min()या max()फ़ंक्शन का उपयोग कर सकते हैं । उदाहरण के लिए:

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0); $dt2 = Carbon::create(2014, 1, 30, 0, 0, 0); echo $dt1->min($dt2);

यह echoदो तिथियों का कम होगा , जो इस मामले में है $dt1

Http://carbon.nesbot.com/docs/ देखें


1

इस प्रकार मैं 2 तारीखों की तुलना कर रहा हूं, अब () और तालिका से एक तारीख

@if (\Carbon\Carbon::now()->lte($item->client->event_date_from))
    .....
    .....
@endif

सिर्फ सही काम करना चाहिए। मैंने कार्बन द्वारा प्रदान किए गए तुलनात्मक कार्यों का उपयोग किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.