বর্তমান তারিখ / সময় নির্ধারিত তারিখ / সময় পার হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


115

আমি এমন একটি স্ক্রিপ্ট লেখার চেষ্টা করছি যা বর্তমান তারিখ / সময়টি অতীত হয়েছে কিনা তা পরীক্ষা করবে will 05/15/2010 at 4PM

এই চেকটি সম্পাদন করতে কীভাবে আমি পিএইচপি-র তারিখ () ফাংশন ব্যবহার করতে পারি?

উত্তর:


228

যেহেতু পিএইচপি> = 5.2.2 আপনি DateTimeক্লাসটি ব্যবহার করতে পারেন তা :

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

ডেটটাইম কনস্ট্রাক্টরকে দেওয়া স্ট্রিং এই নিয়ম অনুসারে পার্স করা হয়


নোট করুন যে এটি ব্যবহার timeএবং strtotimeফাংশনগুলিও সম্ভব । আসল উত্তর দেখুন


6
টাইমস্ট্যাম্পটির কিছু সীমাবদ্ধতা রয়েছে এবং কিছু কিছু বাগও রয়েছে উদাহরণস্বরূপ, টাইমস্ট্যাম্পটি ১৯ 1970০ সালের আগে এবং ২০৩৮ সালের পরে কোনও তারিখ পরিচালনা করতে পারে না (আইভর কোস্টারের উত্তর দেখুন)
স্টিল ব্রেইন

1
আমরা প্রায়শই নতুন ডেটটাইম () এর সাথে কোনও প্যারামিটারের অপব্যবহার দেখতে পাই, আপনি যদি ইউটিসি তারিখগুলি ব্যবহার করেন (যেমনটি আপনার উচিত), নতুন ডেটটাইম ("এখন", নতুন ডেটটাইমজোন ('ইউটিসি')) ব্যবহার করতে পছন্দ করেন। এটি আপনার অ্যাপ্লিকেশনগুলিকে তারিখে ভুল বোঝাবুঝি বাগ থেকে রোধ করবে। আমি আপনাকে এটি কোনও ফাংশন স্ট্যাটিক ভেরিয়েবল, ক্লাস স্ট্যাটিক বা অন্য কোথাও আপনার চলমান প্রক্রিয়াতে
সঞ্চয় করার পরামর্শ দিচ্ছি

যদি আমাদের ইতিমধ্যে একটি ডেটটাইম অবজেক্ট থাকে এবং আমরা জানতে চাই যে এটি অতীত হয়েছে যেহেতু আমরা যেমন প্রস্তাবিতভাবে তারিখটাইম নির্মাণকারীর কাছে কোনও বস্তুটি পাস করতে পারি না? আমরা কি এর গেটটাইমস্ট্যাম্প () ব্যবহার করব এবং এটি সময়ের সাথে তুলনা করব ()? @ সালমান এ
ব্যবহারকারী 4271704

@ ব্যবহারকারী 4271704 new DateTime('2010-05-15')এটি কেবল একটি উদাহরণ, কোনও ডেটটাইম অবজেক্ট হতে পারে যা আপনি আগে শুরু করেছিলেন।
সালমান এ

ধরে $objectনেওয়া একটি ডেটটাইম অবজেক্ট, আমি ব্যবহার করেছি if (new DateTime() > $object) {}এবং এটি ভুলভাবে কাজ করে। তবে সঠিকভাবে if (time() > $bject->getTimeStamp()) {}কাজ করে। @ সালমান এ
ব্যবহারকারী 4271704

77

এছাড়াও ডেটটাইম ক্লাস রয়েছে যা তুলনা অপারেটরদের জন্য একটি ফাংশন প্রয়োগ করে।

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
এটি এর জন্য কী কার্য সম্পাদন করে?
এখনও_ড্রিমিং_1

6

strtotimeআপনার সেট তারিখ / সময়কে একটি টাইমস্ট্যাম্পে রূপান্তর করতে পিএইচপি-র কাজটি পরীক্ষা করুন : http://php.net/manual/en/function.strtotime.php

যদি strtotimeআপনার তারিখ / সময় ফর্ম্যাটটি সঠিকভাবে পরিচালনা করতে না পারে ("4:00 pm" সম্ভবত "4PM" তে কাজ করবে না), আপনাকে স্ট্রিং-ফাংশনগুলি ব্যবহার করতে হবে, যেমন substrআপনার ফর্ম্যাটটি পার্স / সংশোধন করতে এবং আপনার টাইমস্ট্যাম্পটি পুনরুদ্ধার করার জন্য অন্য ফাংশন, যেমন mktime

তারপরে নির্ধারিত টাইমস্ট্যাম্পটিকে বর্তমান তারিখ / সময় ( if ($calulated_timestamp > time()) { /* date in the future */ }) এর সাথে তুলনা করুন নির্ধারিত তারিখ / সময় অতীতে বা ভবিষ্যতে আছে কিনা তা দেখতে।

আমি তারিখ / সময়-ফাংশনে পিএইচপি-ডকটি পড়ার পরামর্শ দিই এবং একবার আটকে গেলে আপনার কিছু উত্স-কোড নিয়ে এখানে ফিরে আসুন।


আইভর কোস্টার এর উত্তর দেখুন
স্টিল ব্রেন

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