একটি তারিখের MM-dd-yyyyফর্ম্যাট দেওয়া হয়েছে, কেউ কি আমাকে সপ্তাহের প্রথম দিন পেতে সহায়তা করতে পারে?
DateTimeসমাধান চাইছেন এবং বেশিরভাগ উত্তরই এটি সরবরাহ করে না। =)
একটি তারিখের MM-dd-yyyyফর্ম্যাট দেওয়া হয়েছে, কেউ কি আমাকে সপ্তাহের প্রথম দিন পেতে সহায়তা করতে পারে?
DateTimeসমাধান চাইছেন এবং বেশিরভাগ উত্তরই এটি সরবরাহ করে না। =)
উত্তর:
আমি যা ব্যবহার করছি তা এখানে ...
$day = date('w');
$week_start = date('m-d-Y', strtotime('-'.$day.' days'));
$week_end = date('m-d-Y', strtotime('+'.(6-$day).' days'));
দিনে সপ্তাহের দিন (রবিবার = 0, সোমবার = 1 ইত্যাদি) উপস্থাপন করে 0 থেকে 6 নম্বর পর্যন্ত একটি সংখ্যা থাকে etc.
$ সাপ্তাহিক_সপ্তাহে মিমি-ডিডি-ইয়াই হিসাবে বর্তমান সপ্তাহের রবিবারের তারিখ রয়েছে।
$ সপ্তাহ_এন্ডে মিমি-ডিডি-ইয়েই হিসাবে চলতি সপ্তাহের শনিবারের তারিখ রয়েছে।
strtotime('this week', time());
সময় প্রতিস্থাপন ()। বর্তমান রবিবার / সোমবার সোমবার যখন শেষ রবিবার / শেষ সোমবার পদ্ধতিগুলি কাজ করবে না।
$monday = strtotime('last monday', strtotime('tomorrow'));
this weekআপনার সপ্তাহের আগের শুরুতে সর্বদা প্রয়োজন থাকলে কাজ করে না, তবে @ লুইসবকলির মন্তব্য এটি করে।
time()আপনি যদি আজ উল্লেখ করতে চান তবে দ্বিতীয় যুক্তিটি specifyচ্ছিক।
strtotimeফাংশনটি ব্যবহার করা খুব সহজ :
echo date("Y-m-d", strtotime('monday this week')), "\n";
echo date("Y-m-d", strtotime('sunday this week')), "\n";
এটি পিএইচপি সংস্করণ জুড়ে কিছুটা পৃথক :
2015-03-16
2015-03-22
2015-03-23
2015-03-22
2015-03-30
2015-03-29
এই সপ্তাহের মতো সম্পর্কিত সম্পর্কিত বিবরণগুলির নিজস্ব প্রসঙ্গ রয়েছে। নিম্নলিখিতটি সোমবার বা রবিবার যখন এই সোমবার বা রবিবারের ফলাফল দেখায় :
$date = '2015-03-16'; // monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))), "\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))), "\n";
$date = '2015-03-22'; // sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))), "\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))), "\n";
এর বিপরীতে পিএইচপি সংস্করণ জুড়ে এটি কিছুটা পৃথক :
2015-03-16
2015-03-22
2015-03-23
2015-03-29
2015-03-16
2015-03-22
2015-03-23
2015-03-22
2015-03-23
2015-03-22
2015-03-23
2015-03-29
2015-03-23
2015-03-29
2015-03-30
2015-03-29
সহজবোধ্য রাখো :
<?php
$dateTime = new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');
?>
সূত্র: পিএইচপি ম্যানুয়াল
এনবি: কিছু ব্যবহারকারী মন্তব্য হিসাবে $ তারিখের সময় মান পরিবর্তন করা হবে।
$dateTime = new \DateTime('2012-05-14');
DateTimeক্লাসটি নির্দিষ্ট করতে তিনি এখানে কোনও নামস্থান ছাড়াই এটি ব্যবহার করছেন , যার অর্থ কোডটি DateTimeচলমান নেমস্পেসে অন্য শ্রেণি কল করা হলেও কাজ করবে work
$givenday = date("w", mktime(0, 0, 0, MM, dd, yyyy));
এটি আপনাকে প্রদত্ত তারিখের সপ্তাহের দিনটি দেয় যেখানে 0= রবিবার এবং 6= শনিবার। সেখান থেকে আপনি সহজেই পিছনের দিকে গণনা করতে পারেন যে দিনটি আপনি চান।
এই প্রশ্নের একটি ভাল ডেটটাইম উত্তর দরকার: -
function firstDayOfWeek($date)
{
$day = DateTime::createFromFormat('m-d-Y', $date);
$day->setISODate((int)$day->format('o'), (int)$day->format('W'), 1);
return $day->format('m-d-Y');
}
var_dump(firstDayOfWeek('06-13-2013'));
আউটপুট: -
string '06-10-2013' (length=10)
এটি বছরের সীমানা এবং লিপ বছরগুলি নিয়ে কাজ করবে।
সম্পাদনা: নীচের লিঙ্কটি পিএইচপি বর্ণিত সংস্করণে আর চলবে না। এটি পিএইচপি 5.6 এ চলছে যা স্ট্রোটোটাইমের নির্ভরযোগ্যতা উন্নত করে, তবে নিখুঁত নয়! টেবিলের ফলাফলগুলি পিএইচপি 5.6 থেকে সরাসরি ফলাফল।
এটির মূল্যের জন্য, রেফারেন্সের একটি সামঞ্জস্যপূর্ণ ফ্রেম নির্ধারণ করার সময় স্ট্রোটোটাইমের জঞ্জাল আচরণের একটি ভাঙ্গন এখানে রয়েছে:
http://gamereplays.org/reference/strtotime.php
মূলত কেবলমাত্র এই স্ট্রিংগুলি নির্ভরযোগ্যতার সাথে আপনাকে একই তারিখটি দেবে, আপনি যখন সপ্তাহে কল করবেন তখন কোনও সপ্তাহেই আপনি থাকছেন না কেন:
strtotime("next monday");
strtotime("this sunday");
strtotime("last sunday");
নিম্নলিখিত কোডটি যে কোনও কাস্টম তারিখের সাথে কাজ করা উচিত, কেবলমাত্র পছন্দসই তারিখের ফর্ম্যাট ব্যবহার করে।
$custom_date = strtotime( date('d-m-Y', strtotime('31-07-2012')) );
$week_start = date('d-m-Y', strtotime('this week last monday', $custom_date));
$week_end = date('d-m-Y', strtotime('this week next sunday', $custom_date));
echo '<br>Start: '. $week_start;
echo '<br>End: '. $week_end;
আমি পিএইচপি 5.2.17 ফলাফলের সাথে কোডটি পরীক্ষা করেছি:
Start: 30-07-2012
End: 05-08-2012
সোমবারকে সপ্তাহের প্রথম দিন হিসাবে ধরে নেওয়া, এটি কাজ করে:
echo date("M-d-y", strtotime('last monday', strtotime('next week', time())));
এটি আমি কোনও তারিখ থেকে সপ্তাহের প্রথম এবং শেষ দিনটি পেতে ব্যবহার করছি । এক্ষেত্রে সোমবার সপ্তাহের প্রথম দিন ...
$date = date('Y-m-d') // you can put any date you want
$nbDay = date('N', strtotime($date));
$monday = new DateTime($date);
$sunday = new DateTime($date);
$monday->modify('-'.($nbDay-1).' days');
$sunday->modify('+'.(7-$nbDay).' days');
এখানে আমি রবিবারকে প্রথম ও শনিবারকে সপ্তাহের শেষ দিন হিসাবে বিবেচনা করছি।
$m = strtotime('06-08-2012');
$today = date('l', $m);
$custom_date = strtotime( date('d-m-Y', $m) );
if ($today == 'Sunday') {
$week_start = date("d-m-Y", $m);
} else {
$week_start = date('d-m-Y', strtotime('this week last sunday', $custom_date));
}
if ($today == 'Saturday') {
$week_end = date("d-m-Y", $m);
} else {
$week_end = date('d-m-Y', strtotime('this week next saturday', $custom_date));
}
echo '<br>Start: '. $week_start;
echo '<br>End: '. $week_end;
আউটপুট:
শুরু: 05-08-2012
শেষ: 11-08-2012
এ কেমন?
$day_of_week = date('N', strtotime($string_date));
$week_first_day = date('Y-m-d', strtotime($string_date . " - " . ($day_of_week - 1) . " days"));
$week_last_day = date('Y-m-d', strtotime($string_date . " + " . (7 - $day_of_week) . " days"));
এটা চেষ্টা কর:
function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y')
{
$wk_ts = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101'));
$mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts);
return date($format, $mon_ts);
}
$sStartDate = week_start_date($week_number, $year);
$sEndDate = date('F d, Y', strtotime('+6 days', strtotime($sStartDate)));
এটি আমি খুঁজে পেয়েছি সবচেয়ে স্বল্পতম এবং সবচেয়ে পঠনযোগ্য সমাধান:
<?php
$weekstart = strtotime('monday this week');
$weekstop = strtotime('sunday this week 23:59:59');
//echo date('d.m.Y H:i:s', $weekstart) .' - '. date('d.m.Y H:i:s', $weekstop);
?>
strtotimeতুলনায় দ্রুত new DateTime()->getTimestamp()।
শুধু ব্যবহার date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
নিম্নলিখিত পিএইচপি সংস্করণ 5.3 পূর্বের প্রদত্ত ফাংশন আপনাকে প্রদত্ত তারিখের সপ্তাহের প্রথম দিন দেয় (এই ক্ষেত্রে - রবিবার, 2013-02-03):
<?php
function startOfWeek($aDate){
$d=strtotime($aDate);
return strtotime(date('Y-m-d',$d).' - '.date("w",$d).' days');
}
echo(date('Y-m-d',startOfWeek("2013-02-07")).'
');
?>
$today_day = date('D'); //Or add your own date
$start_of_week = date('Ymd');
$end_of_week = date('Ymd');
if($today_day != "Mon")
$start_of_week = date('Ymd', strtotime("last monday"));
if($today_day != "Sun")
$end_of_week = date('Ymd', strtotime("next sunday"));
আপনি যদি সপ্তাহের শুরু হিসাবে সোমবার চান তবে এটি করুন:
$date = '2015-10-12';
$day = date('N', strtotime($date));
$week_start = date('Y-m-d', strtotime('-'.($day-1).' days', strtotime($date)));
$week_end = date('Y-m-d', strtotime('+'.(7-$day).' days', strtotime($date)));
এটি করার একটি দুর্দান্ত উপায় হ'ল পিএইচপি হ্যান্ডেল সময় অঞ্চল পার্থক্য এবং দিবালোক সঞ্চয় সময় (ডিএসটি) হ্যান্ডেল করা। এটি আপনাকে কীভাবে করতে হয় তা আমি আপনাকে দেখায়।
এই ফাংশনটি সোমবার থেকে শুক্রবার পর্যন্ত সমস্ত দিন উত্পন্ন করবে, অন্তর্ভুক্ত (কাজের সপ্তাহের দিনগুলি উত্পন্ন করার জন্য সুবিধাজনক):
class DateTimeUtilities {
public static function getPeriodFromMondayUntilFriday($offset = 'now') {
$now = new \DateTimeImmutable($offset, new \DateTimeZone('UTC'));
$today = $now->setTime(0, 0, 1);
$daysFromMonday = $today->format('N') - 1;
$monday = $today->sub(new \DateInterval(sprintf('P%dD', $daysFromMonday)));
$saturday = $monday->add(new \DateInterval('P5D'));
return new \DatePeriod($monday, new \DateInterval('P1D'), $saturday);
}
}
foreach (DateTimeUtilities::getPeriodFromMondayUntilFriday() as $day) {
print $day->format('c');
print PHP_EOL;
}
এটি চলতি সপ্তাহের সোমবার-শুক্রবারের তারিখের সময়গুলি ফিরে আসবে। একটি স্বেচ্ছাসেবী তারিখের জন্য একই কাজ করতে DateTimeUtilities ::getPeriodFromMondayUntilFriday, প্যারামিটার হিসাবে একটি তারিখ এখানে প্রেরণ করুন :
foreach (DateTimeUtilities::getPeriodFromMondayUntilFriday('2017-01-02T15:05:21+00:00') as $day) {
print $day->format('c');
print PHP_EOL;
}
//prints
//2017-01-02T00:00:01+00:00
//2017-01-03T00:00:01+00:00
//2017-01-04T00:00:01+00:00
//2017-01-05T00:00:01+00:00
//2017-01-06T00:00:01+00:00
শুধু সোমবারে আগ্রহী, যেমন ওপি জিজ্ঞাসা করেছে?
$monday = DateTimeUtilities::getPeriodFromMondayUntilFriday('2017-01-02T15:05:21+00:00')->getStartDate()->format('c');
print $monday;
// prints
//2017-01-02T00:00:01+00:00
আপনি তারিখটি বিশ্লেষণ করে ফলাফলটিতে strptime()ব্যবহার date()করেছেন:
date('N', strptime('%m-%d-%g', $dateString));
<?php
/* PHP 5.3.0 */
date_default_timezone_set('America/Denver'); //Set apprpriate timezone
$start_date = strtotime('2009-12-15'); //Set start date
//Today's date if $start_date is a Sunday, otherwise date of previous Sunday
$today_or_previous_sunday = mktime(0, 0, 0, date('m', $start_date), date('d', $start_date), date('Y', $start_date)) - ((date("w", $start_date) ==0) ? 0 : (86400 * date("w", $start_date)));
//prints 12-13-2009 (month-day-year)
echo date('m-d-Y', $today_or_previous_sunday);
?>
(দ্রষ্টব্য: প্রশ্নে এমএম, ডিডি এবং ইয়ি স্ট্যান্ডার্ড পিএইচপি তারিখের বিন্যাস সিনট্যাক্স নয় - আমি কী বোঝাতে চাই তা নিশ্চিত হতে পারছি না, তাই আমি আইএসও-বছর-মাসের সাথে $ start_date সেট করেছি)
এটি করার আরেকটি উপায় ....
$year = '2014';
$month = '02';
$day = '26';
$date = DateTime::createFromFormat('Y-m-d H:i:s', $year . '-' . $month . '-' . $day . '00:00:00');
$day = date('w', $date->getTimestamp());
// 0=Sunday 6=Saturday
if($day!=0){
$newdate = $date->getTimestamp() - $day * 86400; //86400 seconds in a day
// Look for DST change
if($old = date('I', $date->getTimestamp()) != $new = date('I', $newdate)){
if($old == 0){
$newdate -= 3600; //3600 seconds in an hour
} else {
$newdate += 3600;
}
}
$date->setTimestamp($newdate);
}
echo $date->format('D Y-m-d H:i:s');
চলতি সপ্তাহের প্রথম দিন (সোমবার) পাওয়ার সহজতম উপায়:
strtotime("next Monday") - 604800;
যেখানে 604800 - 1 সপ্তাহের মধ্যে সেকেন্ডের গণনা (60 * 60 * 24 * 7)।
এই কোডটি আগামী সোমবার পান এবং এটি 1 সপ্তাহের জন্য হ্রাস করুন। এই কোডটি সপ্তাহের যে কোনও দিন ভালভাবে কাজ করবে। আজ সোমবার হলেও।
আমার টাইমজোনটি অস্ট্রেলিয়ান এবং এটি পেয়ে আমি বেশ হতাশাবোধ পেয়েছি strtotime() যুক্তরাজ্যের তারিখগুলি ঘৃণা করে
যদি বর্তমান দিনটি রবিবার হয়, তবে strtotime("monday this week")পরের দিন ফিরে আসবে।
এটি কাটিয়ে উঠতে:
সতর্কতা : এটি কেবল অস্ট্রেলিয়ান / ইউকে তারিখের জন্য বৈধ
$startOfWeek = (date('l') == 'Monday') ? date('d/m/Y 00:00') : date('d/m/Y', strtotime("last monday 00:00"));
$endOfWeek = (date('l') == 'Sunday') ? date('d/m/Y 23:59:59') : date('d/m/Y', strtotime("sunday 23:59:59"));
গত সপ্তাহের প্রথম দিনের জন্য এখানে একটি ওলাইনার এবং DateTimeঅবজেক্ট হিসাবে গত সপ্তাহের শেষ দিন ।
$firstDay = (new \DateTime())->modify(sprintf('-%d day', date('w') + 7))
->setTime(0, 0, 0);
$lastDay = (new \DateTime())->modify(sprintf('-%d day', date('w') + 1))
->setTime(23, 59, 59);
$string_date = '2019-07-31';
echo $day_of_week = date('N', strtotime($string_date));
echo $week_first_day = date('Y-m-d', strtotime($string_date . " - " . ($day_of_week - 1) . " days"));
echo $week_last_day = date('Y-m-d', strtotime($string_date . " + " . (7 - $day_of_week) . " days"));
আমি এই প্রশ্নের বিরুদ্ধে কয়েকবার এসেছি এবং সর্বদা অবাক করে দিয়েছি যে তারিখের কার্যগুলি এটিকে সহজ বা পরিষ্কার করে না। DateTimeক্লাস ব্যবহার করে এমন পিএইচপি 5 এর জন্য আমার সমাধানটি এখানে রয়েছে :
/**
* @param DateTime $date A given date
* @param int $firstDay 0-6, Sun-Sat respectively
* @return DateTime
*/
function getFirstDayOfWeek(DateTime $date, $firstDay = 0) {
$offset = 7 - $firstDay;
$ret = clone $date;
$ret->modify(-(($date->format('w') + $offset) % 7) . 'days');
return $ret;
}
আসল তারিখের পরিবর্তন এড়াতে ক্লোন করা প্রয়োজন।
কি সম্পর্কে:
$date = "2013-03-18";
$searchRow = date("d.m.Y", strtotime('last monday',strtotime($date." + 1 day")));
echo "for date " .$date ." we get this monday: " ;echo $searchRow; echo '<br>';
এটি সর্বোত্তম উপায় নয় তবে আমি পরীক্ষা করেছি এবং যদি আমি এই সপ্তাহে থাকি তবে আমি সঠিক সোমবার পাই, এবং যদি আমি সোমবারে থাকি তবে আমি সেই সোমবার পাব।