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


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.