दिनांक 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 तक की संख्या होती है।
$ सप्ताह_स्टार्ट में mm-dd-yyyy के रूप में वर्तमान सप्ताह के रविवार की तारीख शामिल है।
$ सप्ताह_एंड में वर्तमान सप्ताह के शनिवार की तारीख मिमी-डीडी-य्यी है।
strtotime('this week', time());
समय बदलें ()। जब अगले दिन रविवार / सोमवार होता है तो अगला रविवार / अंतिम सोमवार के तरीके काम नहीं करेंगे।
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
काम करने की जरूरत नहीं है अगर आप हमेशा पिछले सप्ताह की शुरुआत है, लेकिन @ लुईसबक्ले की टिप्पणी यह करता है।
time()
यदि आप आज निर्दिष्ट करना चाहते हैं तो दूसरा तर्क विकल्प है।
strtotime
फ़ंक्शन का उपयोग करने के लिए बहुत सरल :
echo date("Y-m-d", strtotime('monday this week')), "\n";
echo date("Y-m-d", strtotime('sunday this week')), "\n";
यह PHP संस्करणों में थोड़ा भिन्न है :
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";
यह थोड़ा अलग है PHP संस्करणों में :
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');
?>
स्रोत: PHP मैनुअल
NB: जैसा कि कुछ उपयोगकर्ता ने टिप्पणी की है कि $ dateTime मूल्य संशोधित किया जाएगा।
$dateTime = new \DateTime('2012-05-14');
DateTime
वर्ग को निर्दिष्ट करने के लिए एक नाम स्थान के बिना इसका उपयोग कर रहा है , जिसका अर्थ है कि कोड तब भी काम करेगा जब आपके पास DateTime
वर्तमान नामस्थान में एक और वर्ग होगा ।
$givenday = date("w", mktime(0, 0, 0, MM, dd, yyyy));
यह आपको दी गई तारीख के सप्ताह का दिन देता है जहां 0
= रविवार और 6
शनिवार होता है। वहाँ से आप बस उस दिन की ओर पीछे की गणना कर सकते हैं जिसे आप चाहते हैं।
इस प्रश्न के लिए एक अच्छे DateTime उत्तर की आवश्यकता है : -
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)
यह वर्ष सीमाओं और लीप वर्षों से निपटेगा।
EDIT: नीचे दिया गया लिंक अब PHP के संस्करण पर नहीं चल रहा है। यह PHP 5.6 पर चल रहा है जो strtotime की विश्वसनीयता में सुधार करता है, लेकिन सही नहीं है! तालिका के परिणाम PHP 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;
मैंने PHP 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'));
दिए गए PHP संस्करण पूर्व 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)));
ऐसा करने का एक स्मार्ट तरीका PHP को टाइमज़ोन अंतर और डेलाइट सेविंग टाइम (डीएसटी) को संभालने देना है। मुझे यह दिखाने के लिए कि यह कैसे करना है।
यह कार्य सोमवार से शुक्रवार तक सभी दिन उत्पन्न होगा, समावेशी (कार्य सप्ताह के दिनों के लिए काम)
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);
?>
(नोट: प्रश्न में MM, dd और yyyy मानक php दिनांक स्वरूप वाक्यविन्यास नहीं हैं - मुझे यकीन नहीं हो सकता है कि इसका क्या मतलब है, इसलिए मैंने $ start_date को ISO वर्ष-माह-दिन के साथ सेट किया है)
इसे करने का एक और तरीका ...।
$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"));
मैं कुछ बार इस सवाल के खिलाफ आया हूं और हमेशा आश्चर्यचकित रह जाता हूं कि तारीख के कार्य इस आसान या स्पष्ट नहीं करते हैं। यहां PHP5 के लिए मेरा समाधान है जो DateTime
कक्षा का उपयोग करता है :
/**
* @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>';
इसका सबसे अच्छा तरीका नहीं है, लेकिन मैंने परीक्षण किया है और अगर मैं इस सप्ताह में हूं तो मुझे सही सोमवार मिल जाएगा, और अगर मैं किसी सोमवार को हूं तो मुझे वह सोमवार मिलेगा।