|
| tobyhinloopen wrote:
| Looks like JS-Joda, I like it
| epaulson wrote:
| I've been looking at the calendar and date types for BACnet,
| which is a protocol used in building automation (and hence,
| scheduling is super-important) - one of the things that it's got
| is some nice support for repeating dates/date patterns, sort of
| like cron but with odd extensions. (Because you might want to run
| a fan or purge a storage tank on specific days)
|
| For example, month is a number between 1 and 14, where 1 through
| 12 are Jan-Dec, but a month of '13' means "Odd Months" and month
| '14' means 'Even Months', and there's an explicit 'Not specified'
| for things you might want to run every month.
|
| Similarly there are special values for 'Even Days' and 'Odd
| Days', and special values for Week of Month: 1-7(1), 8-14(2),
| 15-21(3), 22-28(4), 29-31(5), 'Last 7 Days of the month'(6), and
| 'Unspecified'(255)
|
| I like that there's nice compact and standard ways to express and
| serialize these common choices. I wish there was something like
| that included in temporal but it doesn't look like there is?
| vbezhenar wrote:
| Java 8 Date/Time API is surprisingly nice. I think that every
| language should just copy it. It's comprehensive and easy to use.
| twic wrote:
| Java 8's time package is a sort of second version of Joda-Time
| by Stephen Colebourne, who is not very impressed by the new
| JavaScript API:
|
| https://twitter.com/jodastephen/status/1393146501073973248
|
| He has opened a few issues along the way, trying to help TC39
| learn from Joda's experience, with varying results:
|
| https://github.com/tc39/proposal-temporal/issues?q=is%3Aissu...
| nobleach wrote:
| And those of us who used Joda-Time were so pleased when it
| became almost a "built-in" in Java 8.
| topspin wrote:
| Hard won lessons have to be relearned over and over in
| software.
| ape4 wrote:
| Yeah is every language going to have a big date/time API.
| Temporal looks good but its big.
| bluedevil2k wrote:
| They already have that for JS!
|
| https://js-joda.github.io/js-joda/
| asciimov wrote:
| Careful, Oracle is likely to sue you for copying their API.
| slaymaker1907 wrote:
| I always use java.time.* for doing any sort of date arithmetic
| like how many days are between two days or when is 20 days
| after some date. jshell makes it really easy to use, just do
| "import java.time.*".
| mellavora wrote:
| mandatory link:
| https://gist.github.com/timvisee/fcda9bbdff88d45cc9061606b4b...
|
| Falsehoods programmers believe about time
| andrew_ wrote:
| Does it strike anyone else how inelegant this new API is? With
| the plethora of accepted date/time packages out there with wide
| usage, this is the most cumbersome API surface of them all.
| alisiddiq wrote:
| Working with datetimes on JS for the first time was mind
| boggling. Few highlights:
|
| - Months start at 0
|
| - Converting from string datetime to a datetime object will
| automatically convert the time to the local tz
| madeofpalk wrote:
| > - Converting from string datetime to a datetime object will
| automatically convert the time to the local tz
|
| I think this makes sense in the context of client side
| javascript whose sole point is to present UI to the user. The
| dates aren't necessarily _converted_ to local TZ (the date will
| always remain in the same and fixed point in time), but rather
| any output is local to the timezone.
|
| I think this is more good than bad IMHO, given the intention of
| JS is to build (or augment) UIs. It's just not great that it's
| hard to do anything other than that.
| k1t wrote:
| > Converting from string datetime to a datetime object will
| automatically convert the time to the local tz
|
| This happens in C# too:
| DateTime.Parse("2021-06-28T12:00:00Z").Hour
|
| Outputs 5 instead of 12 (for me, US Pacific) due to a default
| conversion to local time. It does have an opt-in flag to
| "adjust to UTC" though.
|
| Not intuitive at all, at least to me...
| dpwm wrote:
| [EDIT] Realised this is the behavior I would expect. Parse is
| doing what I would expect it to, taking into account the
| given time being UTC. It's then returning an object that's in
| the local timezone. Still goes to show just how confusing
| this datetime stuff can be when even the expected behavior
| looks wrong.
|
| Wait... how is this not a bug according to both Microsoft's
| own spec[0] and ISO 8601[1]? The Z specifically means this
| time is in UTC.
|
| The behavior is not at all what I would expect from reading
| the docs [0]:
|
| > A string that includes time zone information and conforms
| to ISO 8601. In the following examples, the first string
| designates Coordinated Universal Time (UTC), and the second
| designates the time in a time zone that's seven hours earlier
| than UTC:
|
| > "2008-11-01T19:35:00.0000000Z"
|
| > "2008-11-01T19:35:00.0000000-07:00"
|
| [EDIT] I get it now: it's parsing it right, it's just that
| it's then putting it into a datetime object that's in the
| local timezone - which is what I would expect. The
| alternative would be counterintuitive to me.
|
| [0] https://docs.microsoft.com/en-
| us/dotnet/api/system.datetime....
|
| [1] https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Univer
| sal...
| anamexis wrote:
| That is describing the different formats it will accept.
|
| Further down the page:
|
| > If s contains time zone information, this method returns
| a DateTime value whose Kind property is DateTimeKind.Local
| and converts the date and time in s to local time.
| Otherwise, it performs no time zone conversion and returns
| a DateTime value whose Kind property is
| DateTimeKind.Unspecified.
| dpwm wrote:
| Yeah, I confused myself and put an edit in there. I first
| thought it was just ignoring the Z then giving out a UTC
| object. Now I realize it was doing what I expected it to:
| parse correctly and hand out a local time.
| chedabob wrote:
| Date.parse returning a number always trips me up.
| jcranmer wrote:
| The months-start-at-0 is a legacy of POSIX's datetime API, as
| is the year field being a count from 1900. Java continued these
| mistakes, and then added the everything-defaults-to-local-tz
| functionality (POSIX had different functions for UTC versus
| local tz), and JS copied Java's API in this respect without
| modification.
|
| Java eventually torched its date/time API not once, but twice:
| the JDK 1.1 addition of Calendar that deprecated most of the
| naive methods on Date, and JDK 8 adding java.time.*, which is
| roughly the modern model of date/time APIs.
| anamexis wrote:
| I don't know where POSIX stands on this, but I think the real
| WTF of JavaScript's months starting at 0 is that the days
| start at 1. Pick one!
| jcranmer wrote:
| POSIX does the same thing.
| cbsmith wrote:
| I think it's basically tradition at this point that languages
| make a hash of their date/time abstractions, maybe getting
| them right after a half dozen iterations.
| tzs wrote:
| I think months from 0 in POSIX were intentional, not
| mistakes. The things you might want to do with an integer
| month number include:
|
| 1. Look up some attribute or property of the month in a table
| (number of days in the month in a non-leap year, name of the
| month, list of fixed holidays in the month, etc).
|
| 2. Determine if the month is before or after a different
| month.
|
| 3. Determine how many months one month is after or before
| another month.
|
| 4. Determine which month is N months before/after a given
| month.
|
| 5. Print the month number for a human.
|
| In languages that use 0-based indexing:
|
| #1 is more convenient with 0-based months.
|
| #2-4 only need that the month numbers form an arithmetic
| progression, so are indifferent to where we start counting.
|
| #5 is more convenient with 1-based months.
|
| So it comes down to is it better to have your low level date
| functions require that you have to remember to subtract 1
| whenever you do something from #1, or to add 1 whenever you
| do something from #5?
|
| I'd expect most programs do a lot more #1 than #5, so the
| code is going to be cleaner if you go with 0-based months.
| jhgb wrote:
| #5 does not seem like something you should be writing
| anyway, there ought to be a standard library mechanism for
| that. So even if you do that often you might not need to
| care about it.
| jcranmer wrote:
| > 1. Look up some attribute or property of the month in a
| table (number of days in the month in a non-leap year, name
| of the month, list of fixed holidays in the month, etc).
|
| The first two cases basically exist internally within the
| date-time library, so it's not a particularly common
| example for end users to be doing. It's also not
| particularly hard to do #1 with 1-based months, because you
| can either subtract one before indexing, or you can just
| have entry 0 be a null-ish value.
|
| The thing is, month names already have an implicit
| numerical mapping: ask anyone, even most programmers, what
| number to assign to the month of January, and you're likely
| to get 1. So an integer representing a month name is going
| to be presumed to be 1-based unless documented otherwise,
| and having it return 0 instead is going to confuse more
| programmers than not.
|
| In other words, the trade-off isn't "is the code going to
| be cleaner for this case or that case" but rather "do we
| make an API that is going to confuse everyone's first
| impression of it, or do we make the code _marginally_ more
| complex in one specific scenario? "
| tzs wrote:
| > The thing is, month names already have an implicit
| numerical mapping: ask anyone, even most programmers,
| what number to assign to the month of January, and you're
| likely to get 1.
|
| Couldn't you make a similar argument then that when
| representing English text, 'A' should be 1? That's the
| number most people would give when asked to assign
| numbers to the alphabet. Not many people are going to say
| 65 which is 'A' in ASCII and Unicode.
|
| Programs are not people.
|
| I generally prefer, and believe it leads to less bugs, to
| represent things in programs in the ways that best fit
| the operations that the program will do doing on them,
| translating between that representation and external
| representations upon input and output.
| cesarb wrote:
| > Couldn't you make a similar argument then that when
| representing English text, 'A' should be 1?
|
| It actually is! >>> hex(ord('A'))
| '0x41' >>> hex(ord('a')) '0x61'
|
| The five-bit intuitive numerical mapping of the letter is
| prefixed with the bits 10 (for uppercase) or 11 (for
| lowercase). A similar thing happens with digits, where
| the four-bit intuitive numerical mapping of the digit is
| prefixed with the bits 011.
|
| For letters, this leads to a "hole" at 0x40 and 0x60.
| Instead of making the letters zero-based (that is, 'A'
| being 0x40 and 'a' being 0x60), they decided to keep the
| intuitive mapping (which starts at 1), and fill the
| "hole" with a symbol.
| Flimm wrote:
| In Javascript's Date API, the month number is 0-based
| (January is 0), but the day number is 1-based (the first
| day of January is 1, not 0). That inconsistency is
| unexpected and makes it harder to use.
|
| I'm glad most modern date APIs use 1-based numbers to
| represent the month and the day (not to mention the year
| from 1 AD onwards).
| masklinn wrote:
| > I think months from 0 in POSIX were intentional, not
| mistakes
|
| These are absolutely not exclusive. 0indexing months was
| probably intentional, and was without a doubt a mistake.
| profmonocle wrote:
| Another fun one: > new Date().getYear()
| 121
|
| Of course this is avoided by using getFullYear(), but I've
| always wondered why a language that came out in 1995 had a
| function that returned two-digit years.
| raxxorrax wrote:
| Didn't find to much info on arithmetic support, although it is
| mentioned.
|
| However, I hate working with dates because many APIs make
| question about dates a slog.
|
| Consider the following for the poor people on the dark side of
| the planet (UTC + something). If any application only saves the
| date and not the time and you have dates like 2021-06-28T00:00:00
| or something like that.
|
| Now it gets saved in a DB as 2021-06-27Z23:00:00, because the
| user lives in UTC+1-land. It is correct but makes my blood boil
| and propably causes a lot of errors, even in apps that set their
| time zone correctly. How often have I seen implementations that
| just /(.*)T.*/ match the date and create a bug.
|
| I have no solution for this, but I wasted too much time on
| problems like this. Such errors also notoriously evade unit
| tests...
|
| This seems decent from a quick look. But let us be honest, it has
| to compete with moment.js, not with Date().
| brundolf wrote:
| I used to work on a web application where showing correct time
| stamps was extremely important, so I set my system-wide time
| zone to Mumbai so that TZ-related bugs would be really obvious
| in testing
| rauschma wrote:
| The Temporal cookbook has more information on time arithmetic:
| https://tc39.es/proposal-temporal/docs/cookbook.html#arithme...
| raxxorrax wrote:
| That looks very promising, thank you.
| rendall wrote:
| > _But let us be honest, it has to compete with moment.js, not
| with Date()._
|
| Moment.js is deprecated: _" Moment.js is a legacy project, now
| in maintenance mode. In most cases, you should choose a
| different library."_
|
| https://github.com/moment/moment/#project-status
| enlyth wrote:
| I've been very happy with date-fns, picked it up after
| hearing good feedback from others: https://date-fns.org/
| trulyme wrote:
| I found its interface inconsistent and unintuitive,
| especially compared to moment.js and day.js. Still better
| than Date though. :)
| leotaku wrote:
| Note that there exists a spiritual successor to Moment.js in
| Luxon[1]. The creator was a Moment maintainer and it lives
| under the Moment project umbrella.
|
| 1: https://moment.github.io/luxon/
| neals wrote:
| Also check out dayjs
| raxxorrax wrote:
| True, but I think it will be some death of author kind of
| story.
|
| Nevertheless the handling has to be at least on a similar
| level.
| dstick wrote:
| That's only half the story. It's "deprecated" because it's
| done. There's nothing more to add, fix or improve in the eyes
| of the maintainer. What a nice place to end up in:
|
| _"We now generally consider Moment to be a legacy project in
| maintenance mode. It is not dead, but it is indeed done."_
|
| https://momentjs.com/docs/
| [deleted]
| paxys wrote:
| You skipped the line right after this which completely
| changed the meaning:
|
| > We recognize that many existing projects may continue to
| use Moment, but we would like to discourage Moment from
| being used in new projects going forward.
| dstick wrote:
| Fair enough, but the parent mentioned that without
| quoting this part. So I just posted the other half.
| Regardless, you're right - new projects shouldn't use it
| because of unknown future problems.
| blowski wrote:
| Wow! Next time someone says "no piece of software is ever
| finished" I'll know where to send them.
| rendall wrote:
| > _There 's nothing more to add, fix or improve in the eyes
| of the maintainer. What a nice place to end up in_
|
| What a strange thing to say. Baffling.
|
| It's deprecated because programming standards have changed,
| the team agrees with those standards and nevertheless feels
| it would be too much work to incorporate them. Not "there's
| nothing more to add" but "we choose to prioritize stability
| over new features"
| mellavora wrote:
| Moment is depreciated because all of its functions were moved
| to date-fns, which lets you import single functions.
| beardyw wrote:
| Dates were invented in case anyone thought programming was fun.
| drenvuk wrote:
| >Now it gets saved in a DB as 2021-06-27Z23:00:00
|
| Why would you _ever_ do this? Save it as a JSON date.
| coolDate.toJSON() would give a timezoned human parseable date.
| Just parse it back to the users locale with a built in Date
| constructor. You can do milliseconds UTC but someone like my
| younger stupid self would screw it up like most people.
| cbsmith wrote:
| If it's only a date, it probably should be _days_ since the
| epoch.
| aljarry wrote:
| But starting from which timezone?
| ulrikrasmussen wrote:
| Irrelevant for dates. Dates do not refer to a point on
| the global timeline.
| alach11 wrote:
| Maybe a better choice would be to use a DateTimeOffset.
| recursive wrote:
| JSON date is not a thing.
| drenvuk wrote:
| Sure, my bad. You know what I mean though.
| recursive wrote:
| I really actually don't. Dates in JSON are going to
| require you to pick a serialization form. ISO8601 seems
| like a totally reasonable pick. So if not that, then
| what? Could you give an example?
| afavour wrote:
| That works great when every interaction you make with the
| data is in JS. But less so if you want to, say, run manual
| SQL queries from time to time.
| mastazi wrote:
| I use a calories counter app called MyNetDiary and I live in
| Sydney (UTC+10:00), if I want to change my calories budget I
| can only do it in the evening, or otherwise the change will
| apply to the previous day.
| qwertox wrote:
| The user doesn't live in UTC+1-land. He lives in
| "Europe/London" or "America/Los_Angeles", because this way DST
| is also considered.
|
| I've settled with storing Zulu time and in a separate field the
| timezone offset of the event in seconds.
| EMM_386 wrote:
| > If any application only saves the date and not the time and
| you have dates like 2021-06-28T00:00:00 or something like that.
|
| I literally just spent hours going around a code base fixing
| this exact problem.
|
| Our back-end is a legacy, 20+ year old database where it was
| decided to save dates without a timezone.
|
| console.log(new Date("2011-09-24"));
|
| is:
|
| Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
|
| These dates were all "thought" to be EST, not UTC. Good times.
|
| More fun examples here:
|
| https://stackoverflow.com/a/31732581/154603
| tomp wrote:
| The original mistake you did was let someone else handle the
| timezone conversion. You should probably always default to
| storing UTC-normalized timezoneless datetimes (there's of
| course a number of exceptions, but generally "an instant" in
| the past should be translated into UTC _before_ being stored
| into the database... with future dates /times, it's more
| ambiguous, but in any case, you should be doing the TZ
| conversion yourself).
| nicoburns wrote:
| This falls down if the timezones themselves change. e.g. if
| DST was planned, but was then cancelled. You really want to
| store the original time with timezone as well as UTC.
| mabbo wrote:
| Yes, this exactly. Use timezones when displaying something to
| a user and otherwise not at all, imho.
| 015a wrote:
| I've personally worked on issues stemming from this; situations
| where the date is important, but not the time, such as
| correctly reporting when it is someone's birthday.
|
| One of the earliest axioms we drill into programmers is "use
| UTC, use date-time types". Don't store dates as strings, use
| your database's DateTime type.
|
| If your database has a Date sans-Time type, use that. But many
| databases don't, and that's where the axiom starts breaking
| down, because its very natural to say "well, I'll use the next
| best thing, a DateTime type". But this is wrong! Its far, far
| better to simply use a YYYY-MM-DD string. I cannot stress how
| much better this is, but its not obvious why its better to
| someone who has had that axiom drilled into their heads, and
| has never ran into this situation before.
| lootsauce wrote:
| This. I have through much pain embraced this approach.
| jkaptur wrote:
| Yeah, "always use UTC" is overrated. It's useful for things
| that _have happened_ , but quickly becomes unintuitive for
| things that _will_ happen - including birthdays, meetings,
| ...
| mattmanser wrote:
| It can even become _wrong_ for future dates. Always use UTC
| is a broken, bad rule for future dates, it only makes sense
| for things that have already happened.
|
| As for how it breaks, you have a booking for 8pm the day
| after the start of summer time. You stored the date/time in
| UTC. Government changes the start of summer time. Your
| database now thinks it's at 7pm because it uses UTC.
|
| Here's some examples:
|
| https://codeofmatt.com/on-the-timing-of-time-zone-changes/
|
| Also the EU is seriously debating getting rid of clock
| changes, and it comes up in the UK semi-regularly.
|
| Your database will not fix your bad data when that happens.
| nicoburns wrote:
| Yep! It sounds like overkill, but the suggestion I've
| seen that seemed to cover all bases was to store:
|
| (1) The time in the local timezone (+ the timezone
| itself) (2) The UTC conversion (3) The version of the
| IANA database used to compute (2)
|
| Then you can use (2) the UTC time for most
| computations/queries, but if a timezone changes then you
| can use (3) to tell which UTC dates need to be updated,
| and (1) to recompute the new correct version of (2).
| mattmanser wrote:
| That seems like overkill for most apps. Better to just
| store the date/time without timezone, and either the
| windows or linux timezone name of the location (which has
| far more specificity than the ISO 8601 offset). Then
| calculate the actual time on the fly when pulling it out
| of the DB.
|
| No mucking around with IANA databases, everything's easy
| to program, server usually keeps itself up-to-date.
| mulmen wrote:
| But would using local time help in this case? For
| example, what if the future event is something like the
| solstice?
|
| It's usecase dependent so it seems like the application
| should deal with this, at which point persisting in UTC
| is still a reasonable choice.
| DasIch wrote:
| When you schedule an event in the future like "meet me at
| 14:00 in cafe foo", this means local time and it's going
| to mean 14:00 local time even when the timezone changes.
|
| If you store this in UTC and the timezone changes, you
| end up converting to the wrong time.
|
| So for future events you should store local time with a
| location you can map to a timezone.
| dheera wrote:
| Personally I solve this problem by just doing everything in
| UTC. All my clocks, calendars, phones, everything read UTC.
|
| "Always use UTC" works if you really, really _always_ use
| UTC.
| _nub3 wrote:
| This is why i use microtime (epoch with miliseconds) over any
| database supported DateTime thingy. It is supported
| everywhere out of the box.
| alerighi wrote:
| I don't get why inventing some other ways of storing dates
| that are not RFC 3339 strings.
| 015a wrote:
| Multiple reasons. First, the DateTime type in a typical
| database isn't even an RFC-3339 string; its a unix
| timestamp. That's it; an unsigned integer. This is very
| space efficient; far more-so than a string. So, then, why
| the indirection; why not just use the integer type
| directly? It communicates to the database engine the intent
| of the data stored, so the database can do useful things
| like, for example, time-based queries, interfacing with
| that integer in more human friendly ways when writing
| queries, displaying it in a more friendly way... its a low-
| cost abstraction, generally.
|
| Except, there is the cost intrinsic to this discussion,
| where going back to strings makes sense. That doesn't mean
| _that_ decision comes with no cost. If you store someone 's
| birthday as "1990-02-05", then need to answer the question
| "who has birthdays in the next month", that's actually
| essentially impossible to do in practically any database
| query engine. You have the problem of both ignoring the
| year field of that string (ok, so, maybe we just store
| "02-05" because the year doesn't matter for birthdays,
| moreso just 'dates of birth', we can denormalize)... but
| even beyond that, the closest most if not all engines could
| get is generating an array of every upcoming day in
| application code (02-05, 02-06, 02-07, etc) then matching
| on each. Alternatively, just sort on the field (sans year)
| then filter in application code, but that's _also_ not
| happening in the database, which has negatives, and
| moreover, this would suddenly start failing across year
| boundaries, but you can special-case that by running a
| second query starting at 01-01 if the first one didn 't
| return enough results...
|
| There's no easy solution. Time is just really hard. Its
| good to have as many tools as possible in your belt, but
| with that you have to know when to reach for one versus
| another. There isn't one solution to any of these problems.
| squeaky-clean wrote:
| Worst case of this I've personally had to fix was an airline
| where you couldn't purchase tickets if you lived anywhere
| with a negative time zone offset. They're a small European
| carrier so it was never a very big issue for them, and all
| the developers and management were in Europe so they never
| noticed it first hand.
|
| Basically when you tried to purchase a ticket, their frontend
| would take the date-of-flight, and adjust it by the user's
| timezone. So a ticket for 2015-01-30 00:00 would become
| 2015-01-29 20:00, or whatever. The dates in the request did
| not match what was expected for your booking code, and 500
| error.
| strbean wrote:
| This might be silly, but I kind of wish Date-with-Timezone
| types existed. It would be nice to be able to take a date and
| ask "Is does timestamp X fall within date Y", where Y is a
| calendar day in a particular place.
| bmuon wrote:
| You don't need a zoned date. You can invert the question
| and ask if a zoned datetime falls within a plain date.
|
| Temporal is very well designed thanks to building on years
| of prior art. Give it a try and you'll realize that it
| leads you to ask those questions the right way.
| slaymaker1907 wrote:
| The correct answer is that you should save it as 2021-06-28
| with no time component. I get frustrated with KeyPass because
| it saves password expiration datetimes and not dates which is
| incredibly inconvenient when you go between timezones a lot.
| dheera wrote:
| > Temporal does not support parsing human-readable strings.
|
| Well shit, that's one of the biggest things I want from a time
| library. There are about 15 different forms of human readable
| string formats that various APIs give you in their JSON
| responses and if they don't solve that, they haven't solved the
| biggest pain point.
|
| I guess congratulations for not solving the problem and instead
| making Javascript even more complicated to use by introducing
| yet another incomplete date library that skirts around perhaps
| the most important feature and which millions of hippie JS devs
| will jump on the bandwagon to use.
| sparsely wrote:
| The Temporal proposal is dramatically better than moment.js
| (and Luxon, the better version of moment). It accurately models
| a much wider range of time based concepts, and draws on (mostly
| just copies) the last 30 years of developments in this space
| from other languages (mostly Java)
| chrisweekly wrote:
| Tangent: moment.js has been replaced by date-fns (and dayjs) as
| the modern alt to native Date().
| shadowgovt wrote:
| The real issue is that time is actually a complicated subject
| that everyone assumes is easy because it's so ubiquitous.
| chaz6 wrote:
| It is disappointing to see GMT conflated with UTC. It is not "UTC
| plus zero hours". GMT is based on solar time, wheras UTC is based
| on TAI. UTC is TAI corrected (with leap seconds) to match GMT.
| Hopefully I have got that right.
| jonny_eh wrote:
| > UTC is based on TAI
|
| What is TAI?
| mburns wrote:
| https://www.fhs.swiss/eng/gmt-utc-tai.html
| LegionMammal978 wrote:
| TAI is International Atomic Time. It is used as the reference
| point for UTC, which is defined as TAI minus a fixed number
| of seconds (currently 37). To add or remove a leap second,
| the TAI - UTC offset is adjusted. Leap seconds have no effect
| on TAI itself, which always runs at 1 second per SI second,
| as measured by a consensus of atomic clocks.
| rattray wrote:
| Will the two ever provide different values?
| Groxx wrote:
| If UTC is corrected to match GMT: what's the difference, aside
| from conceptual?
| postalrat wrote:
| My understanding is it's corrected with whole leap seconds.
| So they could differ by a fraction of a second.
| kemitche wrote:
| For any readers who, like me, weren't sure of the differences
| (or what "TAI" refers to), this page helped clear things up for
| me: https://www.nist.gov/pml/time-and-frequency-division/nist-
| ti...
| HatchedLake721 wrote:
| Thank you. I really don't understand people who use rare
| acronyms on a global forum and don't write what it is.
| [deleted]
| sillyquiet wrote:
| While all that is super cool and good to know, does it change
| or affect at all how js dev or their app interacts with date or
| time since they are for all practical purposes synonymous?
| gmiller123456 wrote:
| Probably not, but there's no reason to perpetuate the
| confusion of the two. I'd think the only practical situation
| where it'd be a problem is if you enter GMT into software
| that actually interprets it as GMT rather than UTC.
| afavour wrote:
| One huge difference between them is that UTC is, well,
| universally used, while GMT is switched out for BST (an hour
| ahead) in summer months on client machines. Not that you
| should be assuming anything about the state of the client
| machine but this is an extra footgun.
| gmiller123456 wrote:
| GMT is not (officially) used anymore. UT1 is based on the
| Earth's rotation within the ICRF (almost J2000) reference frame
| based on the positions of distant quasars. UT1 is not a steady
| time frame, e.g. if you measure UT1 at two times one second
| apart, it probably will differ by something other than one
| second. This is due to the fact that the Earth's rotation rate
| is constantly changing.
|
| UTC is what people normally mean when they refer to GMT or
| Universal Time. It has a steady definition for a second based
| on TAI, and is adjusted by adding leap seconds to keep it
| within .9 seconds of UT1.
|
| Every day the International Earth Rotation Service publishes
| values for UT1-UTC based on actual observations as well as
| other Earth Orientation Parameters. They are also responsible
| for determining and announcing in advance of when a leap second
| will be added.
|
| E.g.:
| https://www.iers.org/IERS/EN/DataProducts/EarthOrientationDa...
| See "finals.all IAU2000"
| sedatk wrote:
| It's not even on caniuse.com or kangax.com's browser
| compatibility tables. I think it'll be a while before we can use
| this in production.
| snemvalts wrote:
| The name for the variable is kind of weird, it feels a bit like
| Java (having 25 years of history to account for). I wonder what
| the Kotlin for JS will be.
| recursive wrote:
| That was coffeescript, but it's come and gone already.
| nobleach wrote:
| I'd put coffeescript as the "Groovy" of JavaScript.
|
| Kotlin is more like a mixture of Typescript and/or Reason (or
| whatever the name is now)
|
| Groovy was that flash-in-the pan idea that had some really
| cool ideas.
|
| But then again, I'm not sure if it really inspired any real
| language changes to Java like Kotlin has. CoffeeScript did a
| TON of inspiration for ES6... so heck, maybe Kotlin IS the
| CoffeeScript
|
| I hope Kotlin survives though.
| CA0DA wrote:
| "January is month 1"
|
| This is what we were all waiting for.
| IshKebab wrote:
| Were we? Would have made more sense to change the day-of-month
| to be zero based too IMO. Or explicitly have both: `monthOne`
| and `monthZero`.
| tffgg wrote:
| Why would you want that? It is super confusing since 1~first
| as well as every real life date representation I know has
| 1=January
| globular-toast wrote:
| Because it only needs to be "1" when you format it for
| human consumption. 0-based is much easier to work with
| internally.
| lexicality wrote:
| > 0-based is much easier to work with internally.
|
| Why's that?
| globular-toast wrote:
| Mainly because you can use normal modulo arithmetic and
| use them as array indices.
|
| But as I mentioned in another comment, really you should
| be touching the internals of the datetime object at all.
| It's a mistake to do something like `myDatetime.day +=
| 1`. You should instead do `myDatetime +
| timeDelta(days=1)` or something.
|
| So it shouldn't matter whether it's 0-based or 1-based at
| all. But since it apparently does (I don't know why),
| then it might as well by 0-based like everything else.
| petepete wrote:
| Even if it was I'd still want days and months to start at
| one and, you know, match everything else in existence
| that represents them.
| dspillett wrote:
| Then why do days not start from 0. If that argument is
| value it should be applied consistently so 2000-01-01 is
| day=0, month=0.
| globular-toast wrote:
| Probably because the ancients didn't have a strong grasp
| on the number 0.
|
| Midnight is zero. What's confusing about the number of
| days starting from 0 too?
|
| Why do we use months? No sane internal representation
| stores the number of months. They are completely and
| utterly useless and exist only in printed representations
| of dates.
| jcranmer wrote:
| Props to the Mayans, whose dates are (almost) a base-20
| number counting from the Mayan date of creation. It's not
| fully base 20, because the 2nd digit only counts to 18
| because 360 is close enough to a year. So 13.0.5.17.19 is
| followed by 13.0.6.0.0 instead of 13.0.5.18.0. Bonus
| points: no leap years to worry about!
|
| The downside is that their full calendar is somewhat more
| complicated, so they would say that today is (checks)
| 13.0.8.11.11 8 Chuwin 9 Sek, and tomorrow is 13.0.8.11.12
| 9 Eb' 10 Sek (that Tzolkin calendar component doesn't
| work like our months do!).
| dspillett wrote:
| I was meaning in the context of JavaScript, where the
| first day is 1 and the first month is 0.
|
| A case can be made for either 0 (for consistency with
| time representation) or 1 (to go with the defacto
| standard of how most if us bipedal meatsacks process
| dates) but there must have been alcohol or something
| stronger involved when the current date object came into
| being.
| kevin_thibedeau wrote:
| 0-based months were meant to assist with lookups in
| 0-based arrays.
| cunthorpe wrote:
| No it doesn't. Dates aren't meant to be worked with as
| raw numbers, so the utility of 0-based numbers is gone
| and now you only have February ending on day number 27
| IshKebab wrote:
| The whole reason months start at zero is because somebody
| wanted to work with them as raw numbers.
| globular-toast wrote:
| If people don't work with them as numbers then the
| argument is completely moot. All you need is timestamps,
| deltas and formatting functions.
|
| How many days is in the delta 1 hour? 1? or 0?
| edoceo wrote:
| ISO 8601 says January is 1. We have a standard.
| globular-toast wrote:
| ISO 8601 is a serialisation format. What's your point?
| squeaky-clean wrote:
| What is "January" -> "1" if not serialization?
| rhacker wrote:
| What is Monday and Sunday?
|
| edit: The dayOfWeek read-only property gives the weekday number
| that the date falls on. For the ISO 8601 calendar, the weekday
| number is defined as in the ISO 8601 standard: a value between
| 1 and 7, inclusive, with Monday being 1, and Sunday 7. For an
| overview, see ISO 8601 on Wikipedia.
| chadlavi wrote:
| This plus Safari desktop support for html5 date and datetime
| inputs will mean that soon date input and handling will be a lot
| less of a pain in the ass. I'm jealous of the young devs who will
| never even know how stupid js dates used to be.
| willio58 wrote:
| My team just implemented the native date inputs for a client's
| site this past week. With native date inputs working for every
| good browser but safari desktop (it's in technology preview),
| we saved lots of time and effort with minimal styling of the
| native date input. Plus, it works soooo much better on iOS, the
| interface for date inputs is great. I assume it's similar on
| Android these days.
| deergomoo wrote:
| > every good browser but safari desktop (it's in technology
| preview)
|
| It's finally in the mainline release now as of version 14.1!
| chadlavi wrote:
| Yes! I can't wait until enough people are using the version
| of Safari that has html5 date input support. We have a big
| dumb custom date input that we can just completely throw away
| at that point and delegate to the browser.
| [deleted]
| dheera wrote:
| > Temporal does not support parsing human-readable strings.
|
| Well shit, that's one of the biggest things I want from a time
| library. There are about 15 different forms of human readable
| string formats that various APIs give you in their JSON responses
| and if they don't solve that, they haven't solved the biggest
| pain point.
|
| I guess congratulations for not solving the problem and instead
| making Javascript even more complicated to use by introducing yet
| another date library that skirts around perhaps the most
| important feature.
| dengsauve wrote:
| I was equally disappointed to see this feature absent.
| brundolf wrote:
| The stable polyfill (and eventual native version) can't come soon
| enough. We're looking to move off of Moment given its deprecation
| status and how much it bloats our bundle, but we're waiting so we
| can go straight to Temporal instead of another intermediate
| library
| ryanmarsh wrote:
| I've been using Temporal in production for a few months now. I
| really enjoy using it. Use it mostly for creating ISO date
| strings and translating between timezones. I can't wait for it to
| make it through the TC39 process.
| selimnairb wrote:
| " "Time Difference" ("Zeitverschiebung") lists time zones for
| cities etc. - for example, the time zone for San Francisco is
| America/Los_Angeles."
|
| Does anyone know how the canonical cities/regions associated with
| a time zone were determined? It seems kind of arbitrary. Wouldn't
| "America/California" or "America/Sacramento, CA" make more sense?
| roywiggins wrote:
| There is also US/Pacific, which is just an alias for
| America/Los_Angeles. America/California is ambiguous, because
| there are several Californias in the "America" area, which
| encompasses North and South America.
|
| https://en.wikipedia.org/wiki/Tz_database#Location
|
| > Country names are not used in this scheme, primarily because
| they would not be robust, owing to frequent political and
| boundary changes. The names of large cities tend to be more
| permanent...
|
| > Usually the most populous city in a region is chosen to
| represent the entire time zone, although another city may be
| selected if it are more widely known, and another location,
| including a location other than a city, may be used if it
| results in a less ambiguous name.
|
| Basically: globally, regions and countries change, but cities
| are much slower to change. They don't just pick up and move
| like borders can.
| Groxx wrote:
| AFAIK the common case is that it's just "whatever is in
| ICU/CLDR", there is no "standard". And I've seen them renamed
| many times - OS versions don't always agree with each other,
| for example, much less different OSes.
| [deleted]
___________________________________________________________________
(page generated 2021-06-28 23:00 UTC) |