Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Date formats for weeks

Tags:

date

mysql

perl

I'm having a difficult time, based on the documentation, of figuring out how to equate week numbers between Perl and MySQL.

How would I calculate the same exact week number in both Perl and MySQL based on a unix timestamp in the same time zone?

SELECT DATE_FORMAT(from_unixtime(datefield), '%Y%U') FROM table;

and

print strftime('%Y%U', localtime($datevar));

should produce identical week numbers for any given timestamp. Ideally I'd like the week number to be something portable, such as ISO 8601. While the week numbers in my testing seem to match up sometimes, I can't find anything in the documentation for both Perl and MySQL that confirms that the date formatting clearly adheres to the same definition.

Thanks!

like image 700
Mike Avatar asked Aug 31 '10 17:08

Mike


People also ask

How do you format the day of the week from a date?

Sometimes, a date is written in long form, like this: Sunday, June 28, 2015 (note that there are commas after the day of the week and the day of the month, but there is no comma after the month). Sometimes, a date is written in numerical form, like this: 6/28/15 or 6/28/2015 (month/date/year).

What is ISO week?

The ISO Week Date Calendar. The Current ISO Week Date is: 2022-W39-3. It is week 39 of year 2022, day 3 of the week, and day 271 of the year.

How do I format the day of the week in Excel?

Format cells to show dates as the day of the week Under Category, click Custom, and in the Type box, type dddd for the full name of the day of the week (Monday, Tuesday, and so on), or ddd for the abbreviated name of the day of the week (Mon, Tue, Wed, and so on).


1 Answers

For Perl, look into the DateTime module. It supplies a week() method, that can return the week number of the year for a given DateTime object:

($week_year, $week_number) = $dt->week;

Note that the year matters, as a date can be in a week for the previous or next year. This is because of the ISO standard for "week", where the first week of the year is the one that contains the fourth day of January. Thus a date like January 1 could be in the final week of the previous year.

To the untrained eye it looks like MySQL's YEARWEEK() function could do the same thing, or as Mikey1980 suggests, try the WEEKOFYEAR() function. It looks like YEARWEEK() does the same thing, as its documentation says:

The year in the result may be different from the year in the date argument for the first and the last week of the year.

...but I can't guarantee they do the same thing. :-)

like image 61
CanSpice Avatar answered Oct 06 '22 19:10

CanSpice