2013-11-04 24 views
5

जिस कंपनी के लिए मैं काम कर रहा हूं वह एक वित्तीय वर्ष है जो 1 जनवरी को शुरू होता है यदि वह गुरुवार है, अन्यथा पिछले वर्ष के आखिरी गुरुवार को शुरू होता है। कुछ इस तरहPHP वित्तीय वर्ष की शुरुआत की गणना

function get_start_of_financial_year() { 
    $date = date('Y').'-01-01'; 
    $correct_day = false; 
    while(!$correct_day) { 
     $day_num = date('N', strtotime($date)); 
     if($day_num==4) return $date; 
     $date = date('Y-m-d', strtotime($date.' -1 day')); 
    } 
} 

मैं कोशिश कर रहा है:

function get_start_of_financial_year() { 
    $date = date('Y').'-01-01'; 
    $day_num = date('N', strtotime($date)); 
    $modifer = 4 - $day_num; 
    return date('Y-m-d', strtotime($date.' -'.$modifer.' days')); 
} 

हालांकि यह काम नहीं करता

मैं एक समारोह है कि यह करता है, लेकिन यह अक्षम पाश की जरूरत लग लिखा है । मुझे पता है कि मैं अपने संशोधक की गणना करते समय कुछ गलत कर रहा हूं, लेकिन क्या?

मैंने यहां अन्य समान प्रश्न/उत्तर देखे हैं और सभी अलग हैं इसलिए मुझे लगता है कि यह एक वास्तविक नया प्रश्न है।

+1

सबसे आसान और सबसे अच्छा समाधान होगा [chumkiu के जवाब bellow] (http://stackoverflow.com/a/19773014/67332)। ** [डेमो देखें] (https://eval.in/60243) **। –

उत्तर

6

doc

के अनुसार, " ' अंतिम 'दिन का नाम " वर्तमान दिन से अंतिम दिन का नाम लेता है। (उदाहरण: "आखिरी शादी जुलाई 2008" का अर्थ है "2008-06-25"; "जुलाई 2008" पहली बार "2008-07-01" की वर्तमान तारीख को सेट करता है और फिर "आखिरी बुध" पिछले बुधवार को चलता है जो "2008 -06-25 ")।

तो अपने मामले

function get_start_of_financial_year($year) { 
    // get the first Thursday before 2 Jan of $year 
    return date("Y-m-d", strtotime("last Thursday $year-01-02")); 
} 

echo get_start_of_financial_year(date("Y")); 
+3

ब्रावो कोड को ठीक किया गया है, इसे उत्तर स्वीकार किया जाना चाहिए। –

+0

धन्यवाद - महान एक लाइन समाधान। मुझे भविष्य में संदर्भ के लिए यह याद होगा;) –

1

बस मज़ा के रूप में मैं के लिए आप

echo date('l jS F (Y-m-d)', strtotime('first thursday january this year')); 

मिश्रण में इस फेंक कोशिश करो तो आप देख सकते हैं यह 1 है?

स्पष्ट रूप से आप प्रारूप आदि की जाँच के लिए सही की आवश्यकता होगी

मैं प्यार करता हूँ इन पीएचपी quirks

+0

http://3v4l.org/tFvVV किसी कारण के लिए सभी संस्करण नहीं हैं =) – MackieeE

+0

हाँ, मैंने अस्वीकरण का उपयोग केवल मज़ेदार के लिए किया था, लेकिन उम्मीद है कि इसी तरह के समाधान को प्रोत्साहित किया जाएगा, बीटीडब्ल्यू php eval साइट मेरे लिए अज्ञात थी –

+0

यह गुरुवार 10 जनवरी (2013-01-10) लौटाता है, लेकिन यह गलत है, इस साल पहला गुरुवार 2013-01-03 था ... –

1
<?php 

$date = date("Y")."-01-01"; 
while(date("l", strtotime($date))!="Thursday")){ 
    $date = date("Y-m-d", strtotime("-1 day", strtotime($date))); 
} 
+0

यह मेरे मूल कार्य का एक और संक्षिप्त संस्करण है, लेकिन मुझे लगता है कि यह लूप की आवश्यकता के बिना संभव होना चाहिए ... –

+0

अच्छी तरह से इस लूप के लिए अधिकतम पुनरावृत्ति केवल 6 है इसलिए मुझे नहीं लगता कि यह अक्षम है। कुछ और नहीं सोच सकता है जब तक कि स्ट्रेटोटाइम "निकटतम गुरुवार को नए साल की पूर्व संध्या" जैसे कुछ का समर्थन करता है, मुझे संदेह है कि – lePunk

+0

मेरे लिए यह अंतहीन लूप जैसा दिखता है यदि आज गुरुवार नहीं है ... –

0

php तारीख समारोह वास्तव में यह करने के लिए आसान उपकरण का एक बहुत प्रदान करता है! मैं निम्नलिखित कोड का उपयोग कर अपने समस्या से निपटने की सिफारिश करेंगे:

/** 
* Calculate the start of the financial year given a certain year 
* @param year the current year 
* @returns the date the current financial year starts 
*/ 
function getStartOffFinancialYear(String year) { 
    // Get the timestamp of this years Jan 1st 
    $timestamp = strtotime(year+'-01-01'); 

    // Check what day it is (you will get an integer) 
    $day = date('w', $timestamp) 

    if($day == 4) {   
     // If it's a thursday, we are done! 
     return $timestamp; 
    } else { 
     // Else we take the previous thursday :) 
     return strtotime("last thursday",$timestamp); 
    } 
} 
0

आप अपने संशोधक दृष्टिकोण का उपयोग करना चाहते हैं, की कोशिश:

$modifer = ($day_num>3) ? $day_num-4 : $day_num+3; 
0

वहाँ जवाब यह है कि मेरे लिए काम है, मैं इसे यहाँ पाया: get the last thursday before a date in PHP

function get_start_of_financial_year() { 
$date = strtotime('2014-01-01'); 
if(date('N',$date) != 4) 
    return date('Y-m-d', strtotime("last thursday",$date)); 
else 
    return $date; 
} 

echo get_start_of_financial_year(); 
0
<?php 
$cur_dt = date('Ymd', mktime(0, 0, 0, date("m") , date("d"), date("Y"))); 
//$cur_dt = date('Ymd', mktime(0, 0, 0, 5 , 10, 2013)); 
//$cur_dt = date('Ymd', mktime(0, 0, 0, 2 , 10, 2013)); 
$cur_mm=""; 
$cur_yy=""; 
$fin_st_dd=""; 
$fin_st_mm=""; 
$fin_st_yy=""; 
$fin_nd_dd=""; 
$fin_nd_mm=""; 
$fin_nd_yy=""; 
$cur_mm= substr(trim($cur_dt),4,2); 
$cur_yy= substr(trim($cur_dt),0,4); 


if ($cur_mm >= "04" && $cur_mm <= "12") 
{ 
    $fin_st_dd="01"; 
    $fin_st_mm="04"; 
    $fin_st_yy=$cur_yy; 
    $fin_nd_dd="31"; 
    $fin_nd_mm="03"; 
    $fin_nd_yy=$cur_yy+1; 
} 

if ($cur_mm >= "01" && $cur_mm <= "03") 
{ 
    $fin_st_dd="01"; 
    $fin_st_mm="04"; 
    $fin_st_yy=$cur_yy-1; 
    $fin_nd_dd="31"; 
    $fin_nd_mm="03"; 
    $fin_nd_yy=$cur_yy; 
} 

$fin_st = date('Ymd', mktime(0, 0, 0, $fin_st_mm , $fin_st_dd, $fin_st_yy)); 
$fin_nd = date('Ymd', mktime(0, 0, 0, $fin_nd_mm , $fin_nd_dd, $fin_nd_yy)); 


echo "\nCurrent Date: $cur_dt\n"; 
echo "\nFinancial Year From : $fin_st To : $fin_nd\n"; 
//echo "\n$fin_nd\n"; 
//echo "\n$fin_st_mm"; 
//echo "\n$fin_st_yy\n"; 
//echo "\n$fin_st_mm"; 
//echo "\n$fin_nd_mm"; 
//echo "\n$fin_nd_yy\n"; 

?> 
संबंधित मुद्दे