2009-09-16 12 views
19

मुझे वर्तमान सप्ताह के लिए सोमवार और शुक्रवार की तारीख कैसे मिल सकती है?वर्तमान सप्ताह के लिए सोमवार और शुक्रवार की तारीख प्राप्त करें (PHP)

मेरे पास निम्न कोड है, लेकिन यदि वर्तमान दिन रविवार या शनिवार है तो यह विफल हो जाता है।

$current_day = date("N"); 
$days_to_friday = 5 - $current_day; 
$days_from_monday = $current_day - 1; 
$monday = date("Y-m-d", strtotime("- {$days_from_monday} Days")); 
$friday = date("Y-m-d", strtotime("+ {$days_to_friday} Days")); 
+2

आप प्रारंभ या सप्ताह के अंत के रूप में रविवार की गिनती कर रहे हैं? – Greg

+0

सप्ताह के अंत के रूप में। – Psyche

उत्तर

52

ये strtotime आदानों बहुत अच्छी तरह से काम करते हैं:

strtotime("next monday"); 
strtotime("previous monday"); 
strtotime("today"); 
strtotime("next friday"); 
strtotime("previous friday"); 

तुम सब करने की ज़रूरत है कुछ बयान करता है, तो अंदर तर्क रैप करने के लिए है।

+1

अच्छा उत्तर लेकिन मैं आज से सोमवार को क्या प्राप्त करना चाहता हूं। 01-01-2012 के रूप में 2-01-2012 – chhameed

+7

@chhameed वापस आ जाएगा: 'strtotime ("अगले सोमवार", strtotime ("2012-01-01")) '। दूसरा पैरामीटर, यदि निर्दिष्ट है, संदर्भ दिनांक के रूप में प्रयोग किया जाता है। –

+1

ओह बहुत बहुत धन्यवाद ... इसकी वास्तव में मेरी मदद की ..... – chhameed

1

यह वास्तव में कैसे आप परिभाषित एक सप्ताह पर निर्भर करता है, लेकिन मैं इस समारोह है कि आप पास "सोमवार" या "शुक्रवार" के लिए तिथि (या उस बात के लिए किसी भी दिन) दे देंगे के साथ आया था:

function closestDate($day){ 

    $day = ucfirst($day); 
    if(date('l', time()) == $day) 
     return date("Y-m-d", time()); 
    else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day))) 
     return date("Y-m-d", strtotime('next '.$day)); 
    else 
     return date("Y-m-d", strtotime('last '.$day)); 

} 

इनपुट: सप्ताह के एक दिन ("रविवार", "सोमवार", आदि)

आउटपुट: अगर मैं निकटतम "रविवार" और आज के लिए कहा है:

  1. "रविवार ": मैं डब्ल्यू बीमार आज की तारीख
  2. "सोमवार" मिलती है: मैं कल की तारीख
  3. "शनिवार मिल जाएगा: मैं कल की तारीख मिल जाएगा

आशा इस मदद करता है :)

9

यह सवाल दिनांक समय जवाब की जरूरत है: -

/** 
* @param String $day 
* @return DateTime 
*/ 
function getDay($day) 
{ 
    $days = ['Monday' => 1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Sunday' => 7]; 

    $today = new \DateTime(); 
    $today->setISODate((int)$today->format('o'), (int)$today->format('W'), $days[ucfirst($day)]); 
    return $today; 
} 

उपयोग:

var_dump(getDay('Monday')->format('l dS F Y')); 
var_dump(getDay('Friday')->format('l dS F Y')); 

आउटपुट:

string 'Monday 30th September 2013' (length=26) 
string 'Friday 04th October 2013' (length=24) 

See it working

0

मैं वर्तमान सप्ताह के प्रति आईएसओ 8601. मैं चाहता हूँ सोमवार हमेशा सोमवार कि यह वर्तमान सप्ताह शुरू कर दिया के रूप में परिभाषित किया जा करने की एक परिभाषा की जरूरत है।

निम्नलिखित समाधान मेरे लिए उत्कृष्ट काम करता है:

$monday = strtotime(date('o-\WW')); 
$friday = strtotime("next friday",$monday); 

$monday के लिए, इस विधि हमेशा वापस आ जाएगी सोमवार को इस कैलेंडर सप्ताह शुरू कर दिया। दुर्भाग्यवश, यह विधि o दिनांक प्रारूप को पार्स करने के लिए PHP 5.1 पर निर्भर करती है। शीर्ष जवाब है, पता चलता है का उपयोग कर PHP के strtotime() समारोह सबसे आसान तरीका है के रूप में

time_for_week_day('wednesday'); 
time_for_week_day('friday',strtotime('2014-12-25')); 
0

:

प्राप्त करने के लिए सप्ताह के किसी दिन, तुम कोशिश कर सकते:

function time_for_week_day($day_name, $ref_time=null){ 
    $monday = strtotime(date('o-\WW',$ref_time)); 
    if(substr(strtoupper($day_name),0,3) === "MON") 
     return $monday; 
    else 
     return strtotime("next $day_name",$monday); 
} 

प्रयोग।

हालांकि, अगर वह बताता है कि बयानों का उपयोग करने के बजाय, आप बस पिछले रविवार को रीसेट कर सकते हैं और वहां से आवश्यक तिथियों को पकड़ सकते हैं।

$monday = strtotime('next monday', strtotime('previous sunday')); 
$friday = strtotime('next friday', strtotime('previous sunday')); 
0

मैं इसी तरह की चीज़ ढूंढ रहा था, सिवाय इसके कि मैं सोमवार को इस सप्ताह नहीं चाहता था। यही वह है जिसके साथ मैं आया:

function getSunday(DateTime $date){ 
    $outdate = clone($date); 
    $day = $date->format("w"); // get the weekday (sunday is 0) 
    $outdate->sub(new DateInterval("P".$day."D")); // subtracting the weekday from the date always gives Sunday 
    return $outdate; 
} 

यह एक मनमाने ढंग से तारीख स्वीकार करता है और रविवार को देता है। फिर आप आसानी से सोमवार से शनिवार तक पहुंचने के लिए दिन जोड़ सकते हैं।

33

बेस्ट समाधान होगा:

$monday = date('Y-m-d', strtotime('monday this week')); 
$friday = date('Y-m-d', strtotime('friday this week')); 
+0

यह बहुत अच्छा है। धन्यवाद। क्या काम छोटा और पठनीय है –

+0

यह स्वीकृत उत्तर से काफी बेहतर है। "इस शुक्रवार" और "अगले शुक्रवार" के बीच कोई अंतर नहीं है। आपको "इस सप्ताह शुक्रवार" और "अगले सप्ताह शुक्रवार" का उपयोग करना होगा – DrDamnit

0

मैं का उपयोग करें:

$first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday'))); 
$last_week_date = date('d F Y', strtotime('next Monday -1 week + 4 days', strtotime('this sunday'))); 
संबंधित मुद्दे