আমি কীভাবে পিএইচপি তে দুটি তারিখ তুলনা করতে পারি?


125

আমি কীভাবে পিএইচপি তে দুটি তারিখ তুলনা করতে পারি?

তারিখটি নিম্নলিখিত ফরম্যাটে ডাটাবেজে সংরক্ষণ করা হয়

2011-10-2

যদি আমি আজকের তারিখটি ডাটাবেজে যে তারিখটির সাথে তুলনা করতে চাইতাম এটি দেখতে কোনটি আরও বেশি, আমি কীভাবে এটি করব?

আমি এটি চেষ্টা করেছিলাম,

$today = date("Y-m-d");
$expire = $row->expireDate //from db

if($today < $expireDate) { //do something; }

কিন্তু এটি সত্যিই সেভাবে কাজ করে না। এটি করার আর একটি উপায় কী?


একটি ডেটটাইম অবজেক্টে ডিবি তারিখগুলি অর্পণ করুন এবং তারপরে সেই বিষয়গুলি তুলনা করুন। আপনি স্ট্যাকওভারফ্লো
— পিটার

উত্তর:


80

ডাটাবেসে তারিখটি 2011-10-2 এর মতো দেখাচ্ছে

এটিকে YYYY-MM-DD এ সঞ্চয় করুন এবং তারপরে স্ট্রিং তুলনা কাজ করবে কারণ '1'> '0' ইত্যাদি etc.


2
তবে তারা যদি 2011-10-02 এবং 2012-02-10, মাসের তুলনা 1> 0 এর মতো দেখায় তবে কী হবে 2011-10-02 <2012-02-10
— ডাভ

14
@ ডেভো, তুলনাটি প্রথম চরিত্রের চেয়ে আলাদা হয়ে যায়। এই ক্ষেত্রে, '1' <'2' এর চতুর্থ সংখ্যা, যাতে আপনি প্রত্যাশিত ফলাফলটি পান।
— ম্যাথু

1
আমি দুঃখিত :), যথেষ্ট যত্নশীল ছিল না।
— ডেভ

নিম্নলিখিত কাজ করবে 2016-03-27 11:59:47 ::: 2016-03-14 10:30:00?
— shorif2000

221

আপনার সমস্ত তারিখ যদি 1970 এর 1 জানুয়ারির উত্তরে হয় তবে আপনি এর মতো কিছু ব্যবহার করতে পারেন:

$today = date("Y-m-d");
$expire = $row->expireDate; //from database

$today_time = strtotime($today);
$expire_time = strtotime($expire);

if ($expire_time < $today_time) { /* do Something */ }

আপনি যদি পিএইচপি 5> = 5.2.0 ব্যবহার করেন তবে আপনি ডেটটাইম ক্লাসটি ব্যবহার করতে পারেন:

$today_dt = new DateTime($today);
$expire_dt = new DateTime($expire);

if ($expire_dt < $today_dt) { /* Do something */ }

বা এই লাইন বরাবর কিছু।


যদি আমি সঠিকভাবে স্মরণ করি তবে উদ্বেগটি 1st of January of 1970শুধুমাত্র উইন্ডোজ চলমান পিএইচপি এর পুরানো সংস্করণগুলিতে প্রযোজ্য এবং এটি ইউনিক্সে কখনও সমস্যা ছিল না।
— vlvaro González

আমি এই উত্তর পছন্দ। এটি একটি দুর্দান্ত পছন্দ তারিখগুলিকে স্ট্রোটাইম () এ রূপান্তর করে
— এরিচ গার্সিয়া

2
এটি কি এখন যদি "আপনার সমস্ত তারিখগুলি ১৯ 1970০ সালের 1 জানুয়ারির উত্তরবর্তী" এবং "2038 এর আগের" হয় না? y2k38 বাগের জন্য আমাদের দেখুন। strtotimeবড় তারিখের জন্য মিথ্যা ফিরে আসবে। stackoverflow.com/questions/2012589/...
— blamb

নোট করুন যে DateTimeপদ্ধতিটি পছন্দসই পদ্ধতি। এই বস্তুটি আগের চেয়ে অনেক বেশি কিছু strtotimeকরতে পারে।
— মাচাভিটি

new DateTime('now')আজকের তারিখটি পুনরুদ্ধার করতেও কাজ করে
— ব্রেথ

23

ইতিমধ্যে প্রদত্ত উত্তরগুলির প্রশংসা করতে নিম্নলিখিত উদাহরণটি দেখুন:

$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database



if($today->format("Y-m-d") < $expireDate->format("Y-m-d")) { 
    //do something; 
}

আপডেট: বা সাধারণ ব্যবহার পুরানো-স্কুল তারিখ () ফাংশন:

if(date('Y-m-d') < date('Y-m-d', strtotime($expire_date))){
    //echo not yet expired! 
}   

1
তারিখ কোনও ফাংশন, শ্রেণি / নির্মাতা নয়।
— spdionis

2
@ স্পিডিয়ান এই মন্তব্যের জন্য ধন্যবাদ, আমি সম্ভাব্য বিভ্রান্তি দূর করতে রাজধানীর চিঠিটি পরিবর্তন করেছি।
— d.raev

6

আমি পিএইচপি দিয়ে এটি করতে চাই না। একটি ডাটাবেসে জানা উচিত, আজ কোন দিন।

SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName

ধন্যবাদ তবে আমি আসলে তারিখটি ব্যবহার করি () আমি আজকের তারিখটি একটি ডিবিতে সঞ্চয় করি না
— সারম্যান বি।

4
তবে আপনি মেয়াদোত্তীর্ণ তারিখটি একটি ডিবিতে সঞ্চয় করেন। এই তারিখটি এখনই () এর সাথে তুলনা করুন
— ডক্টর মোল্ল

4
$today = date('Y-m-d');//Y-m-d H:i:s
$expireDate = new DateTime($row->expireDate);// From db 
$date1=date_create($today);
$date2=date_create($expireDate->format('Y-m-d'));
$diff=date_diff($date1,$date2);

//echo $timeDiff;
if($diff->days >= 30){
    echo "Expired.";
}else{
    echo "Not expired.";
}

2

মিনিটের মধ্যে দুটি তারিখের মধ্যে পার্থক্য কীভাবে পাবেন তা এখানে একটি উপায় ।

// set dates
$date_compare1= date("d-m-Y h:i:s a", strtotime($date1));
// date now
$date_compare2= date("d-m-Y h:i:s a", strtotime($date2));

// calculate the difference
$difference = strtotime($date_compare1) - strtotime($date_compare2);
$difference_in_minutes = $difference / 60;

echo $difference_in_minutes;

প্রশ্নটি ২ টি তারিখের তুলনা করার জন্য জিজ্ঞাসা করছে - আপনার উত্তরটি অতিরিক্ত পরিমাণে পদার্থ যুক্ত করছে (অর্থাত্ অনলাইন / অফলাইন স্থিতি নির্ধারণ) যা প্রশ্নের উত্তর হিসাবে প্রয়োজনীয় নয়। আপনার উত্তরের যে অংশটির তুলনা হয় সেখানে কার্যত এখানে ইতিমধ্যে বিদ্যমান উত্তরের সমান ।
— ক্রেজিলনিবিন

প্রশ্নটি আপডেট করেছে, আমি ভুল প্রশ্নের মধ্যে ভুল উত্তর পোস্ট করেছি ^^;) এটি উত্তরের মতো নয়, কীভাবে তাদের তুলনা করতে হবে এবং কয়েক মিনিটের মধ্যে পার্থক্য পাবেন কীভাবে আমার ইনপুটটি জুড়েছে adding
— Syno

1
আমি আপনার আপডেটের কারণে আমার
— ডাউনটোটটি সরিয়েছি,

2

আপনি তারিখগুলি ইউনিক্স টাইমস্ট্যাম্পগুলিতে রূপান্তর করতে পারেন এবং তাদের মধ্যে পার্থক্যটি কয়েক সেকেন্ডের মধ্যে তুলনা করতে পারেন।

$today_date=date("Y-m-d");
$entered_date=$_POST['date'];
$dateTimestamp1 = strtotime($today_date);
$dateTimestamp2 = strtotime($entered_date);
$diff= $dateTimestamp1-$dateTimestamp2;
//echo $diff;
if ($diff<=0)
   {
     echo "Enter a valid date";
   }

0

আমারও সমস্যা ছিল এবং আমি এটি দ্বারা সমাধান করে:

$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db

if(($today - $expire) > $NUMBER_OF_DAYS) 
{ 
    //do something; 
}

এই কৌশলটি কেন কাজ করে তা উত্তরে ব্যাখ্যা করা উচিত।
— মিকম্যাকুসা

আপনি কীভাবে নিজের অনন্য দৃশ্যের সমাধান করেছেন তা নয়, দয়া করে ওপি'র পোস্ট করা প্রশ্নের উত্তর দিন।
— মিকম্যাকুসা

0

পিএইচপি দিয়ে দুটি তারিখের মধ্যে দিনের মধ্যে কীভাবে পার্থক্য পাবেন তা সম্পর্কে আমার স্পিন এখানে। ব্যবহারের নোট! তারিখের সময় অংশটি বাতিল করতে ফর্ম্যাটে, তথ্যের জন্য ধন্যবাদ সময় ছাড়া তারিখসময় createFromFormat ।

$today = DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));
$wanted = DateTime::createFromFormat('!d-m-Y', $row["WANTED_DELIVERY_DATE"]);
$diff = $today->diff($wanted);
$days = $diff->days;
if (($diff->invert) != 0) $days = -1 * $days;
$overdue = (($days < 0) ? true : false);
print "<!-- (".(($days > 0) ? '+' : '').($days).") -->\n";

-1

একটি ব্লগে উত্তর খুঁজে পেয়েছে এবং এটি এতটা সহজ:

strtotime(date("Y"."-01-01")) -strtotime($newdate))/86400

এবং আপনি 2 তারিখের মধ্যে দিনগুলি পাবেন।


এটি অন্যরকম একটি সমস্যা সমাধান করছে বলে মনে হচ্ছে। দয়া করে কেবল ওপি কর্তৃক জিজ্ঞাসিত প্রশ্নের উত্তর দিন।
— মিকম্যাকুসা

-1

এটি পিএইচপি এর স্ট্রিং তুলনা যুক্তির কারণে কাজ করে। কেবল আপনি পরীক্ষা করতে পারেন ...

if ($startdate < $date) {// do something} 
if ($startdate > $date) {// do something}

উভয় তারিখ অবশ্যই একই ফর্ম্যাটে থাকতে হবে। অঙ্কগুলি বামে শূন্য প্যাডযুক্ত হওয়া এবং সবচেয়ে উল্লেখযোগ্য থেকে কমপক্ষে তাত্পর্যপূর্ণভাবে অর্ডার করা উচিত। Y-m-dএবং Y-m-d H:i:sএই শর্তগুলি সন্তুষ্ট।


1
d-m-Yকাজ করবে না .. Y-m-d(2016-05-08 এর মত শূন্যের সাথে) কাজ করবে। d-m-Yফর্ম্যাটে সেই তারিখগুলি পরীক্ষা করে দেখুন 01-10-2016এবং 20-02-2016স্ট্রিং 0 <2 এর সাথে তুলনা করে এটি তুলনা করা বন্ধ করে দিবে তবে ভুলভাবে ...
— আর্কসিস

আপনার প্রযুক্তিটি আজকের তারিখের তুলনায় অপের
— মিকম্যাকুসা

ওপির একটি আলাদা তারিখের ফর্ম্যাট রয়েছে। তারিখটি দেখে মনে হচ্ছে 2011-10-2।
— মিকম্যাকুসা

-1

আপনি যদি কিছু সময় অন্তর শেষ হওয়ার জন্য কোনও তারিখ ($ তারিখ) চান উদাহরণস্বরূপ একটি পাসওয়ার্ড পুনরায় সেট করার সময় একটি টোকেনের মেয়াদোত্তীর্ণের তারিখ, আপনি এখানে কীভাবে করতে পারেন তা এখানে:

$date = $row->expireDate;

$date->add(new DateInterval('PT24H')); // adds 24 hours

$now = new \DateTime();

if($now < $date) { /* expired after 24 hours */ }

তবে আপনার ক্ষেত্রে আপনি নিম্নলিখিত হিসাবে ঠিক তুলনা করতে পারেন:

$today = new DateTime('Y-m-d');

$date = $row->expireDate;

if($today < $date) { /* do something */ }

এই উত্তরটি মূলত পোস্ট করা প্রশ্নটিকে উপেক্ষা করছে। ওপি দ্বারা সরবরাহিত নমুনা ডেটা দয়া করে ব্যবহার করুন।
— মিকম্যাকুসা

লোকটি সাহায্যের জন্য যা বলছে ঠিক তা নয় তবে আমি ভেবেছিলাম যে কেউ যদি নীতিগুলি বোঝেন তবে এইভাবে সাহায্য করতে পারে।
— faye.babacar78

আমি নীতিগুলি বুঝতে পারি, তবে এই কোডটি জিজ্ঞাসা করা প্রশ্নের উত্তর দেয় না। এই পৃষ্ঠাটি ইতিমধ্যে ভুল এবং সম্পর্কযুক্ত উত্তর দিয়ে সজ্জিত - এটি কেবল গবেষকদের বিভ্রান্ত করে এবং তাদের সময় নষ্ট করে। আমি গবেষকদের সন্ধানের চেষ্টা করছি।
— মিকম্যাকুসা

আমি মনে করি এটি এতটা কঠিন নয়, তিনি ডেট () ফাংশনের পরিবর্তে ডেটটাইম () ক্লাসটি ব্যবহার করতে পারতেন। আমি উপরে যে উত্তরটি রেখেছি তা কোনওভাবে গবেষকদের ধারণা দেওয়া।
— faye.babacar78

1
আমি নিজেকে পুনরাবৃত্তি করা এবং এই আলোচনাটি ছিন্ন করতে চলেছি। দ্বিতীয় সর্বোচ্চ সমাধান ( স্ট্যাকওভারফ্লো.com/ a/ 3847762 / 2943403 ) দুটি ডেটটাইম অবজেক্ট তৈরির এক ভয়ঙ্কর সহজ (অপরাজেয়) উপায় দেখায়। আপনার যাদুকরী requestDate()পদ্ধতিটি কী করে আমার একেবারেই ধারণা নেই - এর কোথাও কোনও উল্লেখ নেই। আমি আপনার উত্তরটি ব্যবহার করব না, বা কোনও গবেষক আপনার সমাধানটি ব্যবহার করার পরামর্শ দেব না। আমি নিজের ভোট পরিবর্তন করার পূর্বেই ভাবছি না।
— মিকম্যাকুসা

-2

প্রথমত, আপনার সার্ভারের বর্তমান তারিখের সময়টি আপনি যে ফর্ম্যাটটি চান তা দেওয়ার চেষ্টা করুন:

  1. বর্তমান তারিখের সময়টি পান

    $ কারেন্ট_ডেট = গেটডেট ();

  2. আপনার ইচ্ছামতো পরিচালনা করার জন্য তারিখ এবং সময় আলাদা করুন:

$ কারেন্ট_ডেট_অনলি = $ কারেন্ট_ডেট [বছর] ।'- '। $ কারেন্ট_ডেট [সোমবার] ।'-'। $ কারেন্ট_ডেট [এমডি]; $ বর্তমান_কালীন_আপনি = $ বর্তমান_ তারিখ ['ঘন্টা']। ':'। $ বর্তমান_তাদী ['মিনিট']। ':'। $ বর্তমান_দিক ['সেকেন্ড'];

  1. আপনি যদি আপনার ডিবিতে অনুদানের তারিখ বা তারিখের সময় ব্যবহার করে থাকেন তবে এটির সাথে তুলনা করুন:

    $ আজ = $ বর্তমান_সামান্য_আপনি ' '$ Current_time_only।

    অথবা

    $ আজ = $ বর্তমান_সামান্য_আলি;

    যদি ($ আজ <$ মেয়াদ শেষ)

আশা করি এটা সাহায্য করবে


এই উত্তরটি আসল প্রশ্নটি সমাধান করার কোন চেষ্টা করে না। ঘন্টা, মিনিট বা সেকেন্ডের জন্য ওপিটির কোনও আগ্রহ নেই।
— মিকম্যাকুসা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.