পিএইচপি ব্যবহার করে দুটি তারিখের মধ্যে দিনের সংখ্যাটি কীভাবে সন্ধান করবেন?
(new DateTime("2010-01-11"))->diff(new DateTime("2019-08-19"))->days;
পিএইচপি ব্যবহার করে দুটি তারিখের মধ্যে দিনের সংখ্যাটি কীভাবে সন্ধান করবেন?
(new DateTime("2010-01-11"))->diff(new DateTime("2019-08-19"))->days;
উত্তর:
$now = time(); // or your date as well
$your_date = strtotime("2010-01-31");
$datediff = $now - $your_date;
echo round($datediff / (60 * 60 * 24));
$your_date-$now
যদি ইতিবাচক পূর্ণসংখ্যা ফেরতের জন্য কোনও ভবিষ্যতের তারিখ চান তবে আপনার ব্যবহার করা উচিত ।
আপনি যদি ব্যবহার করে থাকেন PHP 5.3 >
তবে পার্থক্যটি গণনার এটি এখন পর্যন্ত সবচেয়ে সঠিক উপায়:
$earlier = new DateTime("2010-07-06");
$later = new DateTime("2010-07-09");
$diff = $later->diff($earlier)->format("%a");
$date1
পূর্বে যখন নেতিবাচক থাকে $date2
) তবে তার $diff = $date2->diff($date1)->format("%r%a");
পরিবর্তে ব্যবহার করুন।
DateTime("2010-07-06")
??, এটি Y-m-d
বা Y-d-m
?, DateTime
প্যারামিটারের বিন্যাসটি কী? কোনটি দিন?
পিএইচপি সংস্করণ 5.3 এবং তার থেকে বেশি, পার্থক্য পেতে নতুন তারিখ / সময় ফাংশন যুক্ত করা হয়েছে:
$datetime1 = new DateTime("2010-06-20");
$datetime2 = new DateTime("2011-06-22");
$difference = $datetime1->diff($datetime2);
echo 'Difference: '.$difference->y.' years, '
.$difference->m.' months, '
.$difference->d.' days';
print_r($difference);
নীচে হিসাবে ফলাফল:
Difference: 1 years, 0 months, 2 days
DateInterval Object
(
[y] => 1
[m] => 0
[d] => 2
[h] => 0
[i] => 0
[s] => 0
[invert] => 0
[days] => 367
)
আশা করি এটা সাহায্য করবে !
আপনার তারিখগুলি ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করুন, তারপরে একে অপরের থেকে বিয়োগ করুন। এটি আপনাকে সেকেন্ডের মধ্যে পার্থক্য দেবে, যা আপনি এই পরিসরে একটি আনুমানিক পরিমাণ দিন দিতে 86400 (একদিনে সেকেন্ডের পরিমাণ) দ্বারা ভাগ করেন।
যদি আপনার তারিখগুলি বিন্যাসে থাকে 25.1.2010
, 01/25/2010
বা 2010-01-25
, আপনি এই strtotime
ফাংশনটি ব্যবহার করতে পারেন :
$start = strtotime('2010-01-25');
$end = strtotime('2010-02-20');
$days_between = ceil(abs($end - $start) / 86400);
ceil
পরের পুরো দিন পর্যন্ত কয়েক রাউন্ড ব্যবহার করে of floor
পরিবর্তে যদি আপনি এই দুটি তারিখের মধ্যে পুরো দিনের পরিমাণ পেতে চান তবে ব্যবহার করুন ।
যদি আপনার তারিখগুলি ইতিমধ্যে ইউনিক্স টাইমস্ট্যাম্প ফর্ম্যাটে থাকে তবে আপনি রূপান্তরটি এড়িয়ে যেতে পারেন এবং কেবল $days_between
অংশটি করতে পারেন। আরও বহিরাগত তারিখের ফর্ম্যাটগুলির জন্য, এটি সঠিক করতে আপনাকে কিছু কাস্টম পার্সিং করতে হতে পারে।
$day
ইউনিক্স টাইমস্ট্যাম্প এবং 1PM-তে UNIX টাইমস্ট্যাম্পের মধ্যে পার্থক্য $day+1
সবসময় ডিএসটি পর্যবেক্ষণ টাইমজোনগুলিতে 86400 সেকেন্ড নয় not এটি 24 ঘন্টার পরিবর্তে 23 বা 25 ঘন্টা সেকেন্ডের হতে পারে।
time()
। যদি আপনি এটি করেন তবে প্রস্তুত থাকুন এর 98.0825% নির্ভরযোগ্যতা আপনাকে ব্যর্থ করে। ডেটটাইম (বা কার্বন) ব্যবহার করুন।সঠিক উত্তরের Saksham গুপ্ত (অন্যান্য উত্তর এছাড়াও সঠিক হয়) কর্তৃক প্রদত্ত এগুলির মধ্যে একটি:
$date1 = new DateTime('2010-07-06');
$date2 = new DateTime('2010-07-09');
$days = $date2->diff($date1)->format('%a');
বা পদ্ধতিগতভাবে ওয়ান-লাইনার হিসাবে:
/**
* Number of days between two dates.
*
* @param date $dt1 First date
* @param date $dt2 Second date
* @return int
*/
function daysBetween($dt1, $dt2) {
return date_diff(
date_create($dt2),
date_create($dt1)
)->format('%a');
}
একটি সতর্কতার সাথে: '% a' দিনের সম্পূর্ণ সংখ্যা বোঝায় । আপনি যদি এটি স্বাক্ষরিত পূর্ণসংখ্যা হিসাবে চান, অর্থাৎ দ্বিতীয় তারিখ প্রথম হওয়ার আগে isণাত্মক হয়, তবে আপনাকে '% r' উপসর্গটি (যেমন format('%r%a')
) ব্যবহার করতে হবে ।
আপনার যদি সত্যিই ইউনিক্স টাইমস্ট্যাম্পগুলি অবশ্যই ব্যবহার করতে হয় তবে নীচে বিস্তারিত বেশিরভাগ সমস্যাগুলি এড়াতে সময় অঞ্চলটি GMT এ সেট করুন ।
UNIX টাইমস্ট্যাম্পগুলি ব্যবহার করে (এবং 86400 কে এই দিনগুলিতে রূপান্তর করতে) বেশিরভাগ উত্তর দুটি অনুমান করে যা একসাথে রাখলে, ভুল ফলাফল এবং সূক্ষ্ম বাগগুলির সাথে পরিস্থিতি তৈরি করতে পারে যা ট্র্যাক করা কঠিন হতে পারে এবং কয়েক দিন, সপ্তাহ বা কয়েক মাস পরেও উত্থিত হতে পারে একটি সফল স্থাপনা। এটি এমন নয় যে সমাধানটি কাজ করে না - এটি কাজ করে। আজ. তবে এটি আগামীকাল কাজ বন্ধ করে দিতে পারে।
"গতকাল থেকে কত দিন কেটে গেছে?" যখন জিজ্ঞাসা করা হয়েছিল যে প্রথম ভুলটি এটি বিবেচনা করছে না, কোনও কম্পিউটার যদি পুরো দিনটির চেয়েও কম সময় পার করে "গতকাল" নির্দেশিত তাত্ক্ষণিকের মধ্যে উপস্থিত থাকে এবং তাত্ক্ষণিকতার মধ্যে শূন্যতার উত্তর দিতে পারে ।
সাধারণত "দিন" কে ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করার সময়, যা পাওয়া যায় তা সেই নির্দিষ্ট দিনের মধ্যরাতের টাইমস্ট্যাম্প ।
সুতরাং ১ লা অক্টোবর এবং 15 ই অক্টোবর মধ্যরাতের মধ্যে, পনের দিন অতিবাহিত হয়েছে। তবে পহেলা অক্টোবরের 13:00 থেকে 15 ই অক্টোবর 14:55 এর মধ্যে পনের দিন বিয়োগ 5 মিনিট সময় কেটে গেছে এবং অন্তর্ভুক্ত floor()
পূর্ণসংখ্যার রূপান্তর ব্যবহার বা করা বেশিরভাগ সমাধান প্রত্যাশার চেয়ে একদিন কম রিপোর্ট করবে ।
সুতরাং, "কত দিন আগে Ymd H: i: s" ছিল? সমর্পণ করা হবে ভুল উত্তর ।
দ্বিতীয় ভুলটি একদিনের সাথে 86400 সেকেন্ডের সমতুল্য। এটি প্রায় সর্বদা সত্য - এটি প্রায়শই ঘটে যা সময়কে উপেক্ষা করার জন্য যথেষ্ট হয়। তবে টানা দুই মধ্যরাতের মধ্যে সেকেন্ডের দূরত্ব অবশ্যই বছরে কমপক্ষে দুবার 86400 নয়, যখন দিবালোক সংরক্ষণের সময়টি কার্যকর হয়। ডিএসটি সীমানা জুড়ে দুটি তারিখের তুলনা করলে ভুল উত্তর পাওয়া যাবে।
সুতরাং আপনি যদি নির্দিষ্ট সময়ের জন্য সমস্ত তারিখের টাইমস্ট্যাম্পগুলিকে বাধ্য করার "হ্যাক" ব্যবহার করেন, এমনকি মধ্যরাতটি বলুন (আপনি কেবল দিন-মাস-বছর নির্দিষ্ট করেন এবং ঘন্টা-মিনিট-সেকেন্ড না করেও বিভিন্ন ভাষা এবং ফ্রেমওয়ার্ক দ্বারা স্পষ্টভাবে এটি করা হয়; DET টাইপ সহ একই হ্যাপপেনগুলি যেমন মাইএসকিউএল) যেমন বহুল ব্যবহৃত সূত্র in
(unix_timestamp(DATE2) - unix_timestamp(DATE1)) / 86400
অথবা
floor(time() - strtotime($somedate)) / 86400
ফিরে আসবে, বলুন, 17 যখন DATE1 এবং DATE2 বছরের একই ডিএসটি বিভাগে থাকে; তবে এটি 17.042, এবং আরও খারাপ হতে পারে, 16.958 এ ফিরে আসতে পারে। ব্যবহারের মেঝে () বা পূর্ণসংখ্যা কোনো অন্তর্নিহিত ছাঁটাই তারপর রূপান্তর করব তা হওয়া উচিত ছিল একটি 16 অন্যান্য পরিস্থিতির ইন 17, মত এক্সপ্রেশন "$ দিন> 17" ফিরে আসবে true
17,042 জন্য এমনকি যদি এটি ইঙ্গিত করে যে ব্যায়িত দিন গণনার 18 বছর।
প্ল্যাটফর্মগুলিতে এই জাতীয় কোড পোর্টেবল না হওয়ায় জিনিসগুলি আরও খারাপ আকার ধারণ করে , কারণ তাদের মধ্যে কিছু লিপ সেকেন্ড প্রয়োগ করতে পারে এবং কিছু নাও পারে । সেই প্ল্যাটফর্মের যে উপর না , দুইটি তারিখের মধ্যে পার্থক্য 86400 কিন্তু 86401, হয়তো বা 86399. হবে না তাই কোডটি মে মাসে কাজ করেন এবং আসলে পাস সমস্ত পরীক্ষার জুন পরবর্তী ভঙ্গ করবে যখন 12.99999 দিন পরিবর্তে 12 দিন 13. দুটি তারিখের বলে মনে করা হয় 2015 সালে কাজ করা 2017 সালে কাজ করবে না - একই তারিখগুলি, এবং কোনও বছরই একটি লিপ বছর নয়। তবে 2018-03-01 এবং 2017-03-01 এর মধ্যে, সেই প্ল্যাটফর্মে যেগুলি যত্নশীল, 365 এর পরিবর্তে 366 দিন কেটে যাবে, 2018 কে একটি লিপ বছর তৈরি করবে (যা এটি নয়)।
সুতরাং আপনি যদি সত্যিই ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করতে চান:
round()
বুদ্ধিমানভাবে ফাংশন ব্যবহার করুন , না floor()
।
বিকল্প হিসাবে, D1-M1-YYY1 এবং D2-M2-YYY2 এর মধ্যে পার্থক্য গণনা করবেন না। এই তারিখগুলি সত্যই D1-M1-YYY1 00:00:00 এবং D2-M2-YYY2 00:00:00 হিসাবে বিবেচিত হবে। বরং D1-M1-YYY1 22:30:00 এবং D2-M2-YYY2 04:30:00 এর মধ্যে রূপান্তর করুন। আপনি সর্বদা প্রায় বিশ ঘন্টা একটি বাকী পাবেন। এটি একুশ ঘন্টা বা উনিশ বছর হতে পারে এবং আঠারো ঘন্টা, উনান্ন মিনিট ছত্রিশ সেকেন্ডে হতে পারে। কোনো ব্যাপার না. এটি একটি বৃহত্তর মার্জিন যা সেখানে অবস্থান করবে এবং অদূর ভবিষ্যতের জন্য ইতিবাচক থাকবে। এখন আপনি এটি floor()
সুরক্ষিতভাবে ছাঁটাই করতে পারেন ।
সঠিক সমাধান যদিও, জাদু ধ্রুবক, rounding kludges এবং একটি রক্ষণাবেক্ষণ ঋণ এড়াতে, হয়
একটি সময় গ্রন্থাগার (ডেটটাইম, কার্বন, যাই হোক না কেন) ব্যবহার করুন; আপনার নিজের রোল করবেন না
সত্যিই অশুভ তারিখ পছন্দগুলি ব্যবহার করে ব্যাপক পরীক্ষার কেসগুলি লিখুন - ডিএসটি সীমানা জুড়ে, লিপ বছরগুলিতে, লিপ সেকেন্ড জুড়ে এবং সেইসাথে সাধারণ তারিখগুলি। আদর্শভাবে (ডেটটাইমের কাছে কলগুলি দ্রুত হয় !) স্ট্রিং থেকে ক্রমানুসারে একত্র করে চারটি পুরো বছর (এবং একদিন) মূল্যবান তারিখ উত্পন্ন করে এবং নিশ্চিত করে যে প্রথম দিন এবং পরীক্ষিত দিনের মধ্যে পার্থক্য একের পর এক স্থিরভাবে বৃদ্ধি পায় increases এর ফলে যদি নিম্ন স্তরের রুটিন এবং লিপ সেকন্ড কিছু পরিবর্তন সংশোধন করা হয়েছে প্রতিহিংসা গ্রহণ ব্যাপক ধ্বংস করার চেষ্টা করুন, অন্তত আপনি হবে জানি ।
বাকি টেস্ট স্যুটের সাথে নিয়মিত এই পরীক্ষাগুলি চালান। এগুলি মিলিসেকেন্ডের বিষয় এবং এটি আপনাকে আক্ষরিক অর্থে কয়েক ঘন্টা মাথা চুলকায় বাঁচাতে পারে ।
funcdiff
নীচের ফাংশনটি একটি বাস্তব বিশ্বের দৃশ্যে সমাধানগুলির একটি (যেমন এটি হয়, গ্রহণযোগ্য হিসাবে) প্রয়োগ করে।
<?php
$tz = 'Europe/Rome';
$yearFrom = 1980;
$yearTo = 2020;
$verbose = false;
function funcdiff($date2, $date1) {
$now = strtotime($date2);
$your_date = strtotime($date1);
$datediff = $now - $your_date;
return floor($datediff / (60 * 60 * 24));
}
########################################
date_default_timezone_set($tz);
$failures = 0;
$tests = 0;
$dom = array ( 0, 31, 28, 31, 30,
31, 30, 31, 31,
30, 31, 30, 31 );
(array_sum($dom) === 365) || die("Thirty days hath September...");
$last = array();
for ($year = $yearFrom; $year < $yearTo; $year++) {
$dom[2] = 28;
// Apply leap year rules.
if ($year % 4 === 0) { $dom[2] = 29; }
if ($year % 100 === 0) { $dom[2] = 28; }
if ($year % 400 === 0) { $dom[2] = 29; }
for ($month = 1; $month <= 12; $month ++) {
for ($day = 1; $day <= $dom[$month]; $day++) {
$date = sprintf("%04d-%02d-%02d", $year, $month, $day);
if (count($last) === 7) {
$tests ++;
$diff = funcdiff($date, $test = array_shift($last));
if ((double)$diff !== (double)7) {
$failures ++;
if ($verbose) {
print "There seem to be {$diff} days between {$date} and {$test}\n";
}
}
}
$last[] = $date;
}
}
}
print "This function failed {$failures} of its {$tests} tests between {$yearFrom} and {$yearTo}.\n";
ফলাফল হলো,
This function failed 280 of its 14603 tests
বাস্তবে এটি কয়েক মাস আগে ঘটেছিল। একটি জ্ঞানসম্পন্ন প্রোগ্রামার বেশিরভাগ জায়গায় কুখ্যাত "(মিডনাইটঅফডেটবি-মিডনাইটঅফডেটএ) / 86400" কোড প্লাগ করে বেশিরভাগ সর্বাধিক প্রায় ত্রিশ সেকেন্ড সময় গণনা থেকে বেশ কয়েকটি মাইক্রোসেকেন্ডগুলি সংরক্ষণ করার সিদ্ধান্ত নিয়েছে। এটি এতটা সুস্পষ্ট একটি অপ্টিমাইজেশন ছিল যে তিনি এটি দলিলও করেননি এবং অপ্টিমাইজেশানটি ইন্টিগ্রেশন পরীক্ষায় পাস করেছে এবং কয়েক মাস ধরে কোডটিতে লুকিয়ে রেখেছে, সবার নজরে নেই।
এটি এমন একটি প্রোগ্রামে ঘটেছিল যা বেশ কয়েকটি শীর্ষে বিক্রয়কারী বিক্রয়কর্মীদের মজুরি গণনা করে, যার মধ্যে কমপক্ষে একটি সম্পূর্ণ নম্র পাঁচ-লোক প্রোগ্রামার দলকে একত্রিত করার চেয়ে ভয়ঙ্কর অনেক বেশি আটকানো হয়। এক মাস কয়েক মাস আগে, যে কারণে সামান্য ব্যাপার, ত্রুটিটি আঘাত করেছিল - এবং এই ছেলেগুলির মধ্যে কয়েকটি পুরো দিন ফ্যাট কমিশনগুলির সংক্ষিপ্ত হয়ে পড়েছিল । তারা অবশ্যই আনন্দিত ছিল না ।
অসীমভাবে খারাপ, তারা প্রোগ্রামটিতে তাদের যে বিশ্বাস ছিল (তা ইতিমধ্যে খুব অল্পই) হারিয়ে ফেলেছিল যা তাদেরকে গোপনীয়ভাবে শ্যাফট করার জন্য নকশাকৃত হয়নি , এবং ভান করে - এবং প্রাপ্ত - পরীক্ষার মামলাগুলির সাথে একটি সম্পূর্ণ, বিস্তারিত কোড পর্যালোচনা চলেছে এবং লেম্যানের শর্তে মন্তব্য করেছে (আরও অনেক কিছু) নিম্নলিখিত সপ্তাহগুলিতে রেড কার্পেট চিকিত্সা)।
আমি কী বলতে পারি: প্লাস পাশে, আমরা প্রচুর প্রযুক্তিগত debtণ থেকে মুক্তি পেয়েছি, এবং একটি স্প্যাগেটি গণ্ডগোলের কয়েকটি টুকরো পুনর্লিখন এবং রিফ্যাক্টর করতে সক্ষম হয়েছি যা ১৯৯০ এর দশকে কোনও সিওবিওএল আক্রমণে ফিরে এসেছিল hear প্রোগ্রামটি নিঃসন্দেহে এখন আরও ভাল চলেছে এবং যখন কোনও কিছু মাছধরা দেখায় তখন দ্রুত শূন্য করতে আরও অনেক ডিবাগিং তথ্য রয়েছে। আমি অনুমান করেছি যে কেবলমাত্র এই শেষ জিনিসটি ভবিষ্যতের জন্য সম্ভবত মাসে এক বা দু'জন মানব-দিন বাঁচাতে পারে।
বিয়োগের দিকে, পুরো ব্রোউহাহা সংস্থাটি প্রায় 200,000 ডলার সামনের দিকে - আরও মুখোমুখি, নিঃসন্দেহে কিছু দর কষাকষির ক্ষমতা (এবং, তাই আরও বেশি অর্থ))
"অপ্টিমাইজেশান" এর জন্য দায়ী লোকটি দুর্যোগের আগে এক বছর আগে চাকরি বদলেছিল, তবে এখনও ক্ষয়ক্ষতির জন্য তার বিরুদ্ধে মামলা করার জন্য কথা হয়েছিল। এবং এটি উচ্চ চক্রের সাথে ভালভাবে যায় নি যে এটি "শেষ লোকের দোষ" - এটি আমাদের পরিষ্কার করার বিষয়টি একটি সেট আপের মতো মনে হয়েছিল এবং শেষ পর্যন্ত আমরা এখনও ডগহাউসে রয়েছি এবং দলের একজন ছাড়ার পরিকল্পনা করছেন।
একশত উনিশবার বার, "86400 হ্যাক" নির্দোষভাবে কাজ করবে। (উদাহরণস্বরূপ, পিএইচপি-তে, strtotime()
ডিএসটি উপেক্ষা করে রিপোর্ট করবে যে অক্টোবরের শেষ শনিবারের মধ্যরাত এবং নিম্নলিখিত সোমবারের মধ্যে, ঠিক 2 * 24 * 60 * 60 সেকেন্ড পেরিয়ে গেছে, এমনকি যদি তা স্পষ্টভাবে সত্য নাও হয় ... এবং দুটি ভুল আনন্দের সাথে একটিকে সঠিক করে তুলবে)।
মহিলা ও ভদ্রলোকরা, এটির এক নজির ছিল যখন তা হয় নি। এয়ার ব্যাগ এবং সীট বেল্ট সঙ্গে হিসাবে, আপনি সম্ভবত হবে না সত্যিই জটিলতা হবে (এবং ব্যবহার কর্মের) এর DateTime
বা Carbon
। কিন্তু দিন যখন আপনি পারে (অথবা যেদিন তুমি করতে হবে যখন প্রমাণ আপনি এই সম্পর্কে চিন্তা) চোরের যেমন আসতে হবে। প্রস্তুত হও.
days between two days in php
বা অনুরূপ অনুসন্ধান করে এখানে এসেছিল , কারণ নিজের জীবন নিজেকে লেখার পক্ষে খুব ছোট।
ডেট_ডিফ ব্যবহার করা সহজ
$from=date_create(date('Y-m-d'));
$to=date_create("2013-03-15");
$diff=date_diff($to,$from);
print_r($diff);
echo $diff->format('%R%a days');
$diff
এই ক্ষেত্রে পরিবর্তনশীল)। এর মতো কিছু if ($diff->days > 30) { [doyourstuff]; }
অবজেক্ট ওরিয়েন্টেড স্টাইল:
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
কার্যপ্রণালী শৈলী:
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
এটি ব্যবহৃত :)
$days = (strtotime($endDate) - strtotime($startDate)) / (60 * 60 * 24);
print $days;
এখন এটা কাজ করছে
ভাল, নির্বাচিত উত্তরটি সবচেয়ে সঠিক উত্তর নয় কারণ এটি ইউটিসির বাইরে ব্যর্থ হবে। টাইমজোন ( তালিকার ) উপর নির্ভর করে 24 ঘন্টার "দিন" ব্যতীত সময় সমন্বয় হতে পারে এবং এটি গণনা (60 * 60 * 24) ব্যর্থ করে দেবে।
এখানে এটির উদাহরণ:
date_default_timezone_set('europe/lisbon');
$time1 = strtotime('2016-03-27');
$time2 = strtotime('2016-03-29');
echo floor( ($time2-$time1) /(60*60*24));
^-- the output will be **1**
সুতরাং সঠিক সমাধানটি ডেটটাইম ব্যবহার করবে
date_default_timezone_set('europe/lisbon');
$date1 = new DateTime("2016-03-27");
$date2 = new DateTime("2016-03-29");
echo $date2->diff($date1)->format("%a");
^-- the output will be **2**
দুটি তারিখের মধ্যে পার্থক্য গণনা করুন:
$date1=date_create("2013-03-15");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");
আউটপুট: +272 দিন
তারিখ_ডিফ () ফাংশন দুটি ডেটটাইম অবজেক্টের মধ্যে পার্থক্য প্রদান করে।
আপনি খালি তারিখগুলি খুঁজে পেতে পারেন
<?php
$start = date_create('1988-08-10');
$end = date_create(); // Current time and date
$diff = date_diff( $start, $end );
echo 'The difference is ';
echo $diff->y . ' years, ';
echo $diff->m . ' months, ';
echo $diff->d . ' days, ';
echo $diff->h . ' hours, ';
echo $diff->i . ' minutes, ';
echo $diff->s . ' seconds';
// Output: The difference is 28 years, 5 months, 19 days, 20 hours, 34 minutes, 36 seconds
echo 'The difference in days : ' . $diff->days;
// Output: The difference in days : 10398
পিএইচপি-তে দুটি তারিখের মধ্যে দিনের সংখ্যা
function dateDiff($date1, $date2) //days find function
{
$diff = strtotime($date2) - strtotime($date1);
return abs(round($diff / 86400));
}
//start day
$date1 = "11-10-2018";
// end day
$date2 = "31-10-2018";
// call the days find fun store to variable
$dateDiff = dateDiff($date1, $date2);
echo "Difference between two dates: ". $dateDiff . " Days ";
আপনি নীচের কোড চেষ্টা করতে পারেন:
$dt1 = strtotime("2019-12-12"); //Enter your first date
$dt2 = strtotime("12-12-2020"); //Enter your second date
echo abs(($dt1 - $dt2) / (60 * 60 * 24));
আপনি যদি শুরু এবং শেষের তারিখের মধ্যে সমস্ত দিন প্রতিধ্বনি করতে চান তবে আমি এটি নিয়ে এসেছি:
$startdatum = $_POST['start']; // starting date
$einddatum = $_POST['eind']; // end date
$now = strtotime($startdatum);
$your_date = strtotime($einddatum);
$datediff = $your_date - $now;
$number = floor($datediff/(60*60*24));
for($i=0;$i <= $number; $i++)
{
echo date('d-m-Y' ,strtotime("+".$i." day"))."<br>";
}
দুটি তারিখের মধ্যে দিনের পার্থক্য খুঁজে পাওয়ার সহজ উপায়
$date1 = strtotime("2019-05-25");
$date2 = strtotime("2010-06-23");
$date_difference = $date2 - $date1;
$result = round( $date_difference / (60 * 60 * 24) );
echo $result;
// Change this to the day in the future
$day = 15;
// Change this to the month in the future
$month = 11;
// Change this to the year in the future
$year = 2012;
// $days is the number of days between now and the date in the future
$days = (int)((mktime (0,0,0,$month,$day,$year) - time(void))/86400);
echo "There are $days days until $day/$month/$year";
এখানে আমার উন্নত সংস্করণ যা দ্বিতীয় প্যারামিটারটি পাস করা হলে 1 বছর (মাস) 2 মাস 25 দিন (গুলি) দেখায়।
class App_Sandbox_String_Util {
/**
* Usage: App_Sandbox_String_Util::getDateDiff();
* @param int $your_date timestamp
* @param bool $hr human readable. e.g. 1 year(s) 2 day(s)
* @see http://stackoverflow.com/questions/2040560/finding-the-number-of-days-between-two-dates
* @see http://qSandbox.com
*/
static public function getDateDiff($your_date, $hr = 0) {
$now = time(); // or your date as well
$datediff = $now - $your_date;
$days = floor( $datediff / ( 3600 * 24 ) );
$label = '';
if ($hr) {
if ($days >= 365) { // over a year
$years = floor($days / 365);
$label .= $years . ' Year(s)';
$days -= 365 * $years;
}
if ($days) {
$months = floor( $days / 30 );
$label .= ' ' . $months . ' Month(s)';
$days -= 30 * $months;
}
if ($days) {
$label .= ' ' . $days . ' day(s)';
}
} else {
$label = $days;
}
return $label;
}
}
$early_start_date = date2sql($_POST['early_leave_date']);
$date = new DateTime($early_start_date);
$date->modify('+1 day');
$date_a = new DateTime($early_start_date . ' ' . $_POST['start_hr'] . ':' . $_POST['start_mm']);
$date_b = new DateTime($date->format('Y-m-d') . ' ' . $_POST['end_hr'] . ':' . $_POST['end_mm']);
$interval = date_diff($date_a, $date_b);
$time = $interval->format('%h:%i');
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60;
// display_error($seconds);
$second3 = $employee_information['shift'] * 60 * 60;
if ($second3 < $seconds)
display_error(_('Leave time can not be greater than shift time.Please try again........'));
set_focus('start_hr');
set_focus('end_hr');
return FALSE;
}
<?php
$date1=date_create("2013-03-15");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");
?>
উপরের কোডটি খুব সাধারণ ব্যবহার করেছেন। ধন্যবাদ।
function get_daydiff($end_date,$today)
{
if($today=='')
{
$today=date('Y-m-d');
}
$str = floor(strtotime($end_date)/(60*60*24)) - floor(strtotime($today)/(60*60*24));
return $str;
}
$d1 = "2018-12-31";
$d2 = "2018-06-06";
echo get_daydiff($d1, $d2);
এই সাধারণ ফাংশন ব্যবহার করে। ফাংশন ঘোষণা করুন
<?php
function dateDiff($firstDate,$secondDate){
$firstDate = strtotime($firstDate);
$secondDate = strtotime($secondDate);
$datediff = $firstDate - $secondDate;
$output = round($datediff / (60 * 60 * 24));
return $output;
}
?>
এবং যেখানে আপনি চান এই ফাংশন কল করুন
<?php
echo dateDiff("2018-01-01","2018-12-31");
// OR
$firstDate = "2018-01-01";
$secondDate = "2018-01-01";
echo dateDiff($firstDate,$secondDate);
?>
$diff = strtotime('2019-11-25') - strtotime('2019-11-10');
echo abs(round($diff / 86400));
আপনি যদি MySQL ব্যবহার করছেন
function daysSince($date, $date2){
$q = "SELECT DATEDIFF('$date','$date2') AS days;";
$result = execQ($q);
$row = mysql_fetch_array($result,MYSQL_BOTH);
return ($row[0]);
}
function execQ($q){
$result = mysql_query( $q);
if(!$result){echo ('Database error execQ' . mysql_error());echo $q;}
return $result;
}
কার্বন ব্যবহার করে দেখুন
$d1 = \Carbon\Carbon::now()->subDays(92);
$d2 = \Carbon\Carbon::now()->subDays(10);
$days_btw = $d1->diffInDays($d2);
এছাড়াও আপনি ব্যবহার করতে পারেন
\Carbon\Carbon::parse('')
প্রদত্ত টাইমস্ট্যাম্প স্ট্রিং ব্যবহার করে কার্বন তারিখের একটি অবজেক্ট তৈরি করতে।
সমস্ত উত্তর খুঁজছি আমি সর্বজনীন ফাংশন রচনা করছি সমস্ত পিএইচপি সংস্করণে কী কাজ করছে।
if(!function_exists('date_between')) :
function date_between($date_start, $date_end)
{
if(!$date_start || !$date_end) return 0;
if( class_exists('DateTime') )
{
$date_start = new DateTime( $date_start );
$date_end = new DateTime( $date_end );
return $date_end->diff($date_start)->format('%a');
}
else
{
return abs( round( ( strtotime($date_start) - strtotime($date_end) ) / 86400 ) );
}
}
endif;
সাধারণভাবে, আমি 2 তারিখের মধ্যে দিনগুলি খুঁজতে 'ডেটটাইম' ব্যবহার করি। তবে যদি কোনও কারণে, কিছু সার্ভার সেটআপে 'ডেটটাইম' সক্ষম না করা হয়, তবে এটি 'স্ট্রোটোটাইম ()' দিয়ে সহজ (তবে নিরাপদ নয়) গণনা ব্যবহার করবে।