Is there a function to determine which quarter of the year a date is in?
Given an instance x
of datetime.date, (x.month-1)//3
will give you the quarter (0 for first quarter, 1 for second quarter, etc -- add 1 if you need to count from 1 instead;-).
Originally two answers, multiply upvoted and even originally accepted (both currently deleted), were buggy -- not doing the
-1
before the division, and dividing by 4 instead of 3. Since .month
goes 1 to 12, it's easy to check for yourself what formula is right:for m in range(1, 13):
print m//4 + 1,
print
gives 1 1 1 2 2 2 2 3 3 3 3 4
-- two four-month quarters and a single-month one (eep).for m in range(1, 13):
print (m-1)//3 + 1,
print
gives 1 1 1 2 2 2 3 3 3 4 4 4
-- now doesn't this look vastly preferable to you?-)This proves that the question is well warranted, I think;-).
I don't think the datetime module should necessarily have every possible useful calendric function, but I do know I maintain a (well-tested;-) datetools
module for the use of my (and others') projects at work, which has many little functions to perform all of these calendric computations -- some are complex, some simple, but there's no reason to do the work over and over (even simple work) or risk bugs in such computations;-).
Calculate quarter for dates given an example end date and quarter number
Assuming that you have two input variables:
declare @quarter_end date = '2021-01-31';
declare @current_quarter int = 4;
You can calculate the first month of financial year:declare @first_month_of_fy int = (month(@quarter_end) - @current_quarter * 3 + 12) % 12 + 1;
-- 2 i.e. February
And use that value to calculate the quarter and year for any date using some math:select *
from (values
('2020-12-15'),
('2021-01-15'),
('2021-12-15'),
('2022-01-15')
) as t(testdate)
cross apply (select
(month(testdate) - @first_month_of_fy + 12) % 12 + 1
) as ca1(month_of_fy)
cross apply (select
(month_of_fy - 1) / 3 + 1,
year(dateadd(month, 12 - month_of_fy, dateadd(day, - day(testdate) + 1, testdate)))
) as ca2(fy_quarter, fy_year)
DB<>Fiddle Get current quarter in year with javascript
Given that you haven't provided any criteria for how to determine what quarter "*we are currently in", an algorithm can be suggested that you must then adapt to whatever criteria you need. e.g.
// For the US Government fiscal year
// Oct-Dec = 1
// Jan-Mar = 2
// Apr-Jun = 3
// Jul-Sep = 4
function getQuarter(d) {
d = d || new Date();
var m = Math.floor(d.getMonth()/3) + 2;
return m > 4? m - 4 : m;
}
As a runnable snippet and including the year:function getQuarter(d) { d = d || new Date(); var m = Math.floor(d.getMonth() / 3) + 2; m -= m > 4 ? 4 : 0; var y = d.getFullYear() + (m == 1? 1 : 0); return [y,m];}
console.log(`The current US fiscal quarter is ${getQuarter().join('Q')}`);console.log(`1 July 2018 is ${getQuarter(new Date(2018,6,1)).join('Q')}`);
Determining the quarter that a date falls in when quarters are based on a random start date
Something more general like this?
var quarter = (((checkDate.Year * 12 + checkDate.Month - 1) - (startDate.Year * 12 + startDate.Month - 1)) / 3) % 4 + 1;
Here is an approach that would take the current day of month into account:using System;
namespace ConsoleApplication1
{
class Contract
{
public DateTime StartDate { get; set; }
public int CurrentQuarter
{
get
{
var now = DateTime.Now.Date;
var month = (now.Year*12 + now.Month - 1) - (StartDate.Year*12 + StartDate.Month - 1);
if (now.Day < StartDate.Day) month--;
var quarter = (month / 3) + 1;
return quarter;
}
}
// ...
}
class Program
{
static void Main()
{
var contract = new Contract { StartDate = new DateTime(2016, 1, 12) };
Console.WriteLine("Current contract quarter is {0}", contract.CurrentQuarter);
}
}
}
Make a list with the quarter and year based on a date range of quarters KDB+/Q
I'm sure there are many ways to solve this, a function like f
defined below would do the trick:
q)f:{`$string[1+mod[`month$d;12]%3],'"Q",/:string[`year$d:x[;0]][;2 3]}
q)lyq
2020.01.01 2020.03.31
2020.04.01 2020.06.30
2020.07.01 2020.09.30
2020.10.01 2020.12.31
2021.01.01 2021.03.31
2021.04.01 2021.06.30
2021.07.01 2021.09.30
2021.10.01 2021.12.31
q)f lyq
`1Q20`2Q20`3Q20`4Q20`1Q21`2Q21`3Q21`4Q21
Showing what quarter of a financial year a date is in
This should work:-
SELECT
MyDate,
CASE
WHEN MONTH(MyDate) BETWEEN 1 AND 3 THEN convert(char(4), YEAR(MyDate) - 1) + 'Q3'
WHEN MONTH(MyDate) BETWEEN 4 AND 6 THEN convert(char(4), YEAR(MyDate) - 1) + 'Q4'
WHEN MONTH(MyDate) BETWEEN 7 AND 9 THEN convert(char(4), YEAR(MyDate) - 0) + 'Q1'
WHEN MONTH(MyDate) BETWEEN 10 AND 12 THEN convert(char(4), YEAR(MyDate) - 0) + 'Q2'
END AS Quarter
FROM
MyTable
Output:-MyDate Quarter
---------- --------
2011-01-01 "2010Q3"
2011-04-01 "2010Q4"
2011-07-01 "2011Q1"
2011-10-01 "2011Q2"
How to convert dates to quarters in Python?
Pandas has a method to help you, it's called pd.PeriodIndex(monthcolumn, freq= 'Q')
. You may need to convert your month column to datatype first by using datetime libray.
Pandas also have a method called 'to_date'
that you can use to convert a column to a date column.
For example:
df["year"] = pd.to_date(df["year"])
How to get the first date and last date of current quarter in java.util.Date
Here is solution in Java 7 or older (otherwise, I suggest to check other answers):
private static Date getFirstDayOfQuarter(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)/3 * 3);
return cal.getTime();
}
private static Date getLastDayOfQuarter(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)/3 * 3 + 2);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
return cal.getTime();
}
Note 1: Months in java.util.Calendar are represented as integers starting from 0 (Jan) through 11 (Dec)Note 2: division of integers in Java results in floor value (another integer value). So 2/3 = 0, 4/3 = 1 and so forth.
So,
cal.get(Calendar.MONTH)/3 * 3
calculates zero-based index of quarter: 0(Q1), 1(Q2), 2(Q3), 3(Q4).Example: Feb in Calendar is 1. So, 1 / 3 * 3 = 0.
If Feb date is supplied, then start of the quarter is 1st of Jan (because we got 0) and the end of quarter is last day of month 0 + 2 = 2 (Mar)
Related Topics
Python: Can't Pickle Type X, Attribute Lookup Failed
How to Multiply Individual Elements of a List with a Number
Make Part of a Matplotlib Title Bold and a Different Color
Can You Make Multiple "If" Conditions in Python
Csvwriter Not Saving Data to File the Moment I Write It
Split Dataframe into Relatively Even Chunks According to Length
Check If an Item Is in a Nested List
Matplotlib Custom Marker/Symbol
Multiprocessing.Pool Makes Numpy Matrix Multiplication Slower
A Good Way to Make Long Strings Wrap to Newline
Quickest Way to Make a Get_Dummies Type Dataframe from a Column with a Multiple of Strings
How to Import a Module in Python with Importlib.Import_Module
Reading Binary Data from Stdin
Django Unique Together (With Foreign Keys)
How to Read Class Attributes in the Same Order as Declared
Most Efficient Way to Sort an Array into Bins Specified by an Index Array