6 ms·
I never use any date library and I never had a problem with it. I just use what the native Date() object offers. Other devs always say "Just wait, one day it
by TekMol 4y ago
I never use any date library and I never had a problem with it.
I just use what the native Date() object offers.
Other devs always say "Just wait, one day it will fall on your feet".
But this has been going on for many years, in which my software has served millions of users and nothing ever fell on my feet. I think the complexity of a library like this (423 files, 1433 commits, 53004 lines of code) would have created more problems during this time. So not using one is a net positive.
Any minimal code example of what is prone to break without a date library and how this date library is supposed to prevent it?
- epgui 4y agoExamples of essential complexity you have to worry about if you want your code to be correct, and even if you want to test/detect all issues that can/do come up: - https://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time https://infiniteundo.com/post/25326999628/falsehoods-program... - https://infiniteundo.com/post/25509354022/more-falsehoods-programmers-believe-about-time https://infiniteundo.com/post/25509354022/more-falsehoods-pr... In my experience engineers will often brush these sorts of things off as “edge cases”, but really all of these complexities are just how dates and time work in the real life (I’d argue that they’re just “normal cases” to test for)… So any anomaly in software will cause real problems of varying importance for users.
- extheat 4y agoI only see this being an issue storing times as strings. Why not store them as integers (like a Unix timestamp) or at least some standardized string format? The only reasonable use case I can think of where you absolutely need all this complexity is if you're rendering a calendar or something similar.
- 9wzYQbTYsAIc 4y agoThere are countless, profitable business use cases for accurate time tracking.
- ohbtvz 4y agoUser: set an alarm in eight hours. It's 10PM right now. At what time should the alarm be set? 6AM? Woops, tomorrow is the switch to DST! What now? User: remind me to brush my teeth on November 21st at 8AM. Okay, will do! Wait, you took a plane on November 2nd and are now on the other side of the world? Should I remind you at 8AM or 5PM? User: please note my doctor's appointment in two weeks at 10AM. Sure thing bub! Wait, but you live in Morocco in 2019? And the government just announced that reverse DST will be in effect for the month of Ramadan, which begins next week?! WTF do I do now? --- tl;dr It's not just an issue of storage. Managing time is hard. There are requirements that we, as humans, will intuitively find the right interpretation for, that computers will absolutely break their teeth on.
- jt2190 4y ago> What now? I mean, there is no way to write code to “handle” this that isn’t just guessing on the part of the programmer. The correct thing to do is to prompt the user for verification or further information. > There are requirements that we, as humans, will intuitively find the right interpretation for… Interpretation is subject to error. (Yes humans have immensely more context to work with than computer programs, but just because we we’re better guessers doesn’t mean we’re not still guessing.)
- TekMol 4y agoThis was the reply I was trying to prevent by saying "minimal code example". I'm not interested in long theoretical articles. But I would look at a few lines of code. Here is an example of some code I recently wrote: logEvent { 'date': new Date().toISOString(), 'event': 'image_updated', 'value': image['id'], } This logs that an image with a given id was updated. Why would I trade in my single date line for 423 files with 53004 lines of code?
- krainboltgreene 4y agoYou wouldn't. It's not a trade anyone is asking.
- 0xCAP 4y agoThis is only you having super basic date needs, not Day.js being overkill in general.
- TekMol 4y agoAny system, no matter how complex, can be composed of smaller units that only have super basic needs.
- 411111111111111 4y ago*if all complexity has been hidden from the developer which only needs to use a decent puplic API. I'd agree that it feels like that quiet often as a web developer, but that's only because most of our APIs are actually quiet easy to use. The illusion usually falls away if you look at the code of that API, however.
- 9wzYQbTYsAIc 4y ago> I'm not interested in long theoretical articles Those articles are more empirical in nature than theoretical. > This logs that an image with a given id was updated As a thought exercise, imagine that your log trail needed to be created in a distributed system, spanning multiple machine time zones, or that you needed to build a report that is read from browsers in multiple time zones that differ from multiple differing written time zones, and you need to account for human readable things like knowing what day of the week it is and what some given locale calls that day. If you are doing the equivalent of printf debugging with your times, maybe you likely don’t need a time library. If you are using time as a central part of a distributed algorithm, web content, or a business workflow, then you may likely need a time library.
- maigret 4y agoYou can still add a library once it’s really needed and an area is proved to cause bugs. Most of the times though, developers will add them upfront “just in case”, making the bundles always heavier and thus harming the user experience with a slower UI.
- epgui 4y agoI’d argue that we already know how time works, so the proof exists up front and there is no “just in case”. You could make an argument that there are more important things to fix, but then you’d be deciding consciously that it was okay to ship software known to be incorrect.
- jwalton 4y agoI posted about this elsewhere in the comments, but my experience with day.js is that if you're concerned with these kinds of corner cases, maybe day.js isn't the library for you.[1][2] [1]: https://github.com/iamkun/dayjs/issues/1816 https://github.com/iamkun/dayjs/issues/1816 [2]: https://github.com/iamkun/dayjs/issues/1817 https://github.com/iamkun/dayjs/issues/1817
- kristopolous 4y agoI've always found moment to just present the same problems you would otherwise have with a few new ones tacked on stated in a different and more complicated way but with a pitch site and artwork. The js date is a bit primitive and moment looks easier but in practice it's actually a convoluted clunky type system that hides important nuance behind impressively bad defaults. I approach all of these "better than what the language offers" solutions the same way: it would be truly remarkable if some kid had a more nuanced and correct take then people with years of experience and PhDs in language design who made the language but more likely, I think the kid who wrote the library is just better at drawing cartoon characters, hype posting on social media and making something popular. I used to get immediate hostility and belittling insults when I stated this about 10 years ago. I think people have finally come around. Let's see how the replies go.
- robertlagrant 4y agoWho is "some kid"?
- kristopolous 4y agoIntentionally unspecified. This isn't a personal attack but instead a systemic and cultural critique It's been like this for decades. Emotional salience sells software better than hard practicality to just about everyone. Then people rationalize their irrational choices then the timeline slips and the product sucks. You can just sit and watch it play out like someone studying monkeys. It's remarkably predicable.
- 9wzYQbTYsAIc 4y agoAs important as the relatively low file size is for the utility of this library, the API compatibility with Moment is perhaps the magnum opus.
- kristopolous 4y agoAbsolutely. Great job. No question. Everyone should build things and follow their heart. Full stop. This wasn't anything about the posted software. It was a reply to a comment.
- forty 4y agoAny operation like adding/substracting months from a date is very messy to implement yourself. What is one month ago when you are March, 31st? We have to deal with monthly subscriptions and it's not fun.
- TekMol 4y agoFirst you have to define what you mean by "one month ago". Is it 30 days ago? Or last month? Or a certain number of milliseconds ago? No library can help you with that. You have to define what you actually want to calculate.
- 9wzYQbTYsAIc 4y agoAt some point you will need to calculate how many leap years to account for and whether or not a leap second was introduced in between two arbitrary times. Time libraries can help you with that.
- forty 4y agoExactly there is the same problem, to a lesser extend, when adding/subtracting years which is not trivial to do properly.
- 9wzYQbTYsAIc 4y agoLet alone determining requirements for thresholds. This discussion reminds me of this bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1715455 https://bugzilla.mozilla.org/show_bug.cgi?id=1715455
- ponyous 4y agoWhy can’t you use Date.getFullYear with setFullYear?
- forty 4y agoAbsolutely. moment has a definition of that and compute it in a consistent way, which is useful. But if you want to come up with a different definition then it cannot help you indeed.
- M4v3R 4y agoCan you write a one liner to give me the timestamp for start or end of current week, or month? How about a text representation of a difference between two dates? Relative date string (eg. “2 weeks ago”)? Date comparison between two dates that are in different time zones? Does your date calculations take leap hours and leap seconds into account? Date libraries make all these and many more operations a breeze, while rolling these on your own can be tricky, error prone and you’ll be just wasting your time.
- mgkimsal 4y ago> Can you write a one liner to give me the timestamp for start or end of current week, or month? And... it's a multi tenant system, where some organizations use Sunday as the start of a week, and some use Monday. And they all want to be able to switch.
- Macha 4y agoUsers in timezone A need to schedule events many months in the future in timezone B, and display them in a report in timezone C. In addition, should the legal authority in timezone B change their DST rules in the meantime, the local time of the event as observed in timezone B should still be what the user initially selected, which is not the same in UTC as it was at creation time
- tasqyn 4y agodifferent countries use different date format and also how do you manage languages?