Yes, someone actually did this and I found it running on our server
As a Real Programmer™ I have developed such a deep fear of anything time and date related that I would fully endorse dispatching an API call to the tz_database instead of attempting any fucking part of this.
Kids, it’s fine to meme about silly stuff… but date and time is deadly serious, regardless of how careful you think you’re being you are wrong.
Do you know how many timezones there are in Indiana? No? Look it up and scream in horror.
What if I told you that weekend days are locale dependent?!
Time and date is the black hole where optimistic programmers go to die. Nothing is simply with localisation and if you think it is, you mustn’t have worked enough with it.
Source: Run a system that schedules millions of interactions across the world and deeply depend on this. The amount of code to manage and/or call out to external services to give us information about time zones, summer time, locale specific settings, day names, calendar systems, week numbers etc etc.
Luckily we won’t colonize the moon or another planet anytime soon…
deleted by creator
Here’s a fun thought experiment: What gregorian year and date will the spacian date value of zero correlate to? Trick question.
The atomic clock on the moon and every other celestial body colonized will simply start at zero, and thanks to relativity it will not actually be the same rate of time passing as on earth.
Enjoy your nightmares.
2 timezones but the complication is that it is dependent on which country you’re in?
There are two distinct time offsets used in Indiana but there are 11 different timezones https://en.m.wikipedia.org/wiki/Time_in_Indiana
IMO every datetime should be in utc, and variables for datetimes should either be suffixed “Utc” or have a type indicating their time zone (DateTimeOffset or UtcDateTime etc). Conversion to local time happens at the last possible second (e.g. in the view model or an outbound http request parameter). Of course that doesn’t solve the problem of interoperating with other
moronsprogrammers who don’t follow these rules, but it keeps things a lot neater locally.Scheduling based on regional time conventions (holidays, weekends, etc) is just not great though.
Throwing UTC everywhere doesn’t solve comparisons around leap seconds. I’m sure they’re other issues with this method, but this is kinda the point of “just use a library”. Then it’s someone else’s problem.
I’m a .NET dev, I don’t have a concept of “just use a library.” Everything is a library. I don’t mean “using int for datetimes is ok as long as you label it utc,” I just mean “don’t deal with time zones.”
Unix is the easiest format I’ve used. It’s easy to parse, it’s consistent, there’s not usually competing unix like formats, it converts perfectly to other time formats, most file explorers can immediately sort it correctly, and it’s clearly the date from which the universe spawned into existence.
It’s alright, but real programmers use Julian UTC.
I also really like the Bitcoin block number. It will likely be one of the most provable records of time passing, but not as convienent for tracking or converting time.
Relevant talk by Jon Skeet
Honestly the first one is the only one that works when people define the first day of the week differently. On the other hand, it does make you wonder. If Sunday is the first day of the week (as it is in many places) then how is it also part of the weekend?
But if you’re worried about locale, you can’t assume people use the string “Saturday” to describe Saturday either. That solution only works in English.
I assume this is in a language where the first day of the week is a fixed part of the language (like JS).
Yeah it’s the front end of the week and Saturday is the rear end
They’re the week’s ends, front and back.
Thats not really one weekend then though, is it? Its more like last week’s post-week weekend and this week’s pre-week weekend
You want to expand your business to Europe. Bam, your code is broken, in Europe the week starts on Monday.
Than you want to expand to the middle east. Bam, broken again… Because in arab countries and Israel, the weekend is on Friday and Saturday.
Then you want to expand to Mexico and India. Bam, broken again, their weekend is only on Sunday.
The obvious solution is to inject an IWeekendDaysOfWeekProvider service in the inversion of control container. In your, uh, javascript web app.
Just npm install isWeekend for the required locales.
Depends on: isMonday, isTuesday,…
This but non-ironically.
This dude(ette) globalizes.
Not using
CultureInfo.InvariantCulture
for basically everythingI was wondering why the second example returned monday and tuesday. I had no idea the week could start any day other than monday
You forgot weekend = dayOfWeek.name[0] == ‘S’;
Can confirm this works completely as expected when the user’s system is set to lang=ES.
true but that’s a precondition to some of the other examples as well
weekend = day_of_week in (“sat”, “sun”)
As a bonus this completely sidesteps the issue of what day is 0 or 1.
Until some idiot sends in “Sunday” as days of the week…
/^(sun|sat)/i.test(day_of_week)
👍
Ah yes the ole
sunweday
. My favorite day of the weekend.
Interesting that your days are 1-indexed. What happens on nullday?
Zat is vhen ve party!
Reserved for future use
Undefined
I’d make it a named function for clarity and testability and proceed to give zero shits how it is implemented. I would unironically write this code if it worked, but I wouldn’t inline it to reduce the cognitive load of reading it.
This, and maybe a couple of unit tests
7 unit tests should be enough I think
Lol i can’t lie, it took me a while to get the joke. I feel so dumb
weekend = dayOfWeek > 5
dayOfWeek is clearly represented by 1-7 in the example, with Sunday being 1.
So, I guess the answer is “depends on what date library you’re linking against”
Sunday is
10 and Saturday is76.You just made Friday part of the weekendYou forgot SundayOn which planet? Monday is 1
I was off by one, but Sunday is 0 in javascript
Image Transcription: Meme
[Paneled meme with a brain that gets increasingly glowing]
[The brain is smaller than the skull]
if dayOfWeek.name == "Sunday" || dayOfWeek.name == "Saturday" weekend = true
[The brain is glowing in some areas]
if dayOfWeek < 2 || dayOfWeek > 6 weekend = true
[The brain is shooting out rays of light]
weekend = !((dayOfWeek - 1) % 6)
I am a human volunteer who transcribes posts to improve accessibility on programming.dev and you could be one too! !transcribing@programming.dev