প্রদত্ত তারিখটির সাথে আজকের তুলনা করুন


216

আমার অনুসরণ আছে

$var = "2010-01-21 00:00:00.0"

আমি এই তারিখটিকে আজকের তারিখের সাথে তুলনা করতে চাই (অর্থাত আমি এটি জানতে চাই কিনা) $var এটি আজকের আগে বা আজকের সমান )

আমার কোন ফাংশনটি ব্যবহার করতে হবে?


5
আমি সময়
অঞ্চলও

উত্তর:


289
strtotime($var);

এটিকে একটি সময়ের মানে পরিণত করে

time() - strtotime($var);

এর পর থেকে আপনাকে কয়েক সেকেন্ড দেয় $var

if((time()-(60*60*24)) < strtotime($var))

পরীক্ষা হবে $varশেষ দিনে মধ্যে হয়েছে।


1
পিএইচপি 4 এর জন্য শেষ '.0' কে $ var = "2010-01-21 00: 00: 00.0" থেকে ছেড়ে দিন, অন্যথায় স্ট্রোটাইমটি ফিরে আসবে -1
ভিভোকনকনসিনো

1
আমি পিএইচপি 7.1 ব্যবহার করছি। সাব সেকেন্ড অংশটি কেবল উপেক্ষা করা হবে, প্রদত্ত সেকেন্ডের সংখ্যার সাথে পূর্ণসংখ্যার দেওয়া হবে।
ডায়োগো মেলো

209

স্ট্যান্ডার্ড স্ট্রিং তুলনার জন্য এই ফর্ম্যাটটি পুরোপুরি উপযুক্ত eg

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');

উপলভ্য পিএইচপি টাইমজোনগুলি উল্লেখ করতে এখানে ক্লিক করুন



@ আনুশার, যদি তুলনায় টাইমজোন প্রয়োজন হয়, সময়ের পার্থক্য তুলনা করার আগে তারিখে যুক্ত করা যেতে পারে। এটি এখনও দুটি তারিখের সময়ের স্ট্রিংগুলিকে mm/dd/yyyyফরম্যাটে রূপান্তর করার চেষ্টা করে তারপরে তুলনা করে তত দ্রুত । বিকাশকারীদের সিস্টেমে একাধিক টাইম জোনে তারিখ থাকলে এটি সর্বদা আমাকে চিন্তিত করে। আমি মনে করি আপনার সিস্টেমে সর্বদা সিঙ্গল টাইম জোনে তারিখগুলি সংরক্ষণ করা ভাল এবং তারপরে যা টাইমজোন প্রয়োজন তা এটিকে প্রদর্শন করুন। আমি 1998 এর আশেপাশে yyyy-mm-ddফর্ম্যাটটি (বা yyyymmdd) ব্যবহার করা শুরু করি যখন আমি বুঝতে পারি যে এটি এসকিউএল সার্ভারেও আরও দ্রুততর আকার ধারণ করে।
এএএ

59

আপনি এখানে যান:

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());
}

অদ্ভুত পিছনের দিকে যুক্তি এবং বহিরাগত বুলিয়ান কেন? কেন শুধু "রিটার্ন স্ট্রোটোটাইম ($ সময়) == স্ট্রোটোটাইম ('আজ')", "রিটার্ন স্ট্রোটোটাইম ($ সময়)> সময় ()", এবং "রিটার্ন স্ট্রোটোটাইম ($ সময়) <সময় ()"?
ববি জ্যাক

@ ববি জ্যাক: এই ফাংশনে আমার আরও কার্যকারিতা ছিল, অতিরিক্ত কোড মুছতে ভুলে গিয়েছিলেন। এখনই স্থির।
অ্যালিক্স অ্যাক্সেল

সহায়তা ফাংশনটিতে +1, বিশেষতঃপাস্ট বি / সি আমি কেবল একটি চালিয়েছি if(strtotime('2013-01-22 00:00:00.00') < time()){....}এবং এটি আমার জন্য করেছে।
MDMoore313

47

বোবিবি জ্যাকটি সম্পূর্ণ করতে ডেটটাইম ওবজেক্ট ব্যবহার করুন, যদি আপনার পিএইচপি 5.2.2+ থাকে:

if(new DateTime() > new DateTime($var)){
    // $var is before today so use it

}

এটি সঠিক নয়। যদি $ var বর্তমান দিনের (ঠিক মাঝরাতের পরে) হয় তবে নতুন ডেটটাইম () বড় হবে তবে নতুন ডেটটাইম ($ ভ্যার) এবং এটি সত্য নয় $ ভার আজকের আগের।
dxvargas

46

আপনি 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অতীত হয়ে গেছে। : পি
mbomb007

আমার, কিভাবে সময় উড়ে।
সালমান এ

13
$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সমান খুব ওপি মধ্যে
alexus

1
এবং আপনার (নতুন ডেটটাইম ()) -> ফর্ম্যাট ('ইয়াম-ডি') এর জন্য পিএইচপি> = 5.4 প্রয়োজন;
webrama.pl

6

আমার অভিজ্ঞতার ভিত্তিতে একটি সতর্কতা, যদি আপনার উদ্দেশ্যটি কেবলমাত্র তারিখের সাথে জড়িত থাকে তবে টাইমস্ট্যাম্পটি অন্তর্ভুক্ত করতে সাবধান হন । উদাহরণস্বরূপ, আজকের দিনটি বলে "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একই দিনে থাকলেও সর্বদা অতীত হিসাবে বিবেচিত হবে same

এটি ঠিক করার জন্য, আপনি এই জাতীয়ভাবে কোড করতে পারেন:

if (date("Y-m-d") <= $input)
{
    echo "Input date is equal to or greater than today.";
}

1
আমি নিশ্চিত ওপি এটি বিবেচনা করেছে এবং সে কারণেই তারা তাদের প্রশ্নের মধ্যে `00: 00: 00.0 'অন্তর্ভুক্ত করেছে
এএএ

6

কয়েক বছর পরে, আমি ববি জ্যাকের দ্বিতীয় পর্যবেক্ষণের দ্বিতীয় যে গত 24 ঘন্টা আজ নেই !!! এবং আমি অবাক হয়েছি যে উত্তরটি এতটা উপরে উঠেছিল ...

একটি নির্দিষ্ট তারিখের চেয়ে কম, সমান বা অন্যটির চেয়ে বেশি হলে তুলনা করতে প্রথমে আপনাকে সেগুলি দিনের শুরুতে "ডাউন" করা দরকার। অন্য কথায়, নিশ্চিত হয়ে নিন যে আপনি উভয় তারিখের একই সময় 00:00:00 সময়ের কথা বলছেন। এটি সহজ এবং মার্জিতভাবে হিসাবে করা যেতে পারে:

strtotime("today") <=> strtotime($var)

যদি $varওপিকে উল্লিখিত মত 00:00:00 সময় অংশ থাকে।

প্রতিস্থাপন করা <=>আপনার যা প্রয়োজন তা দিয়ে (বা এটি পিএইচপি 7 এ রাখুন)

এছাড়াও, স্পষ্টতই, আমরা উভয়ের জন্য একই সময় অঞ্চল সম্পর্কে কথা বলছি। জন্য সমর্থিত সময়ের অঞ্চলগুলোকে তালিকা


5
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);

(w3 স্কুলগুলির উদাহরণ, এটি নিখুঁতভাবে কাজ করে)


4

ডাব্লু 3 স্কুল থেকে জোসুয়ার উত্তরটি প্রসারিত:

//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';}

আশা করি এটা কাজে লাগবে. স্ট্যাকওভারফ্লোতে আমার প্রথম পোস্ট!


1

তারিখের সময় অবজেক্টগুলির সাথে তুলনা করুন:

(আমি 10 দিন বাছাই করেছি - 10 দিনের চেয়ে পুরানো যে কোনও কিছুই হ'ল "ওল্ড", অন্যথায় "নতুন")

$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');
}

1

কিছু দেওয়া উত্তর বর্তমান দিন বিবেচনা করা হয় না!

এই আমার প্রস্তাব।

$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
}

0

আপনি যদি সময় এবং তারিখের সাথে জিনিসগুলি করেন তবে কার্বন আপনি সেরা বন্ধু;

প্যাকেজটি ইনস্টল করুন:

$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 = এর চেয়ে কম, জিটি = এর চেয়ে বড়

প্রশ্নে যেমন:

$theDay->gt(Carbon::today()) ? true : false;

এবং আরো অনেক কিছু;

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