Labithiotis
Labithiotis

Reputation: 4139

Dayjs format with timezone abbreviation i.e. 'z' like in moment.js

Trying to migrate from Moment.js to Dayjs but the only thing I can't get working is the Timezone abbreviation.

dayjs('2020-07-06T14:30:00.000-04:00').tz(dayjs.tz.guess()).format('Do MMM YYYY [at] HH:MMa z')

Calling the above I would expect 6th Jul 2020 at 08:07am EDT but currently I am just getting z where EDT is.

I have added the utc and timezone plugins and can't see any other plugins needed to make this work, I notice on Dayjs format docs that z isn't listed but searching the web, I see a lot of folks saying the solution is format('', {timeZone}) but the format doesn't take a second argument??

Looks like it was added to tz-plugin: https://github.com/iamkun/dayjs/pull/325/files#diff-cad460a5e46a2a48c59e95356c683820R195

Here's a code sandbox with an example of the issue: https://codesandbox.io/s/hungry-knuth-r58gz

--- Edit

Looks like support for tz abbr was removed :( https://github.com/iamkun/dayjs/pull/448/commits/e64c03cea79c579bcd3c4caf235b4724e56614d4

Upvotes: 14

Views: 41971

Answers (3)

Carlos Jaime C. De Leon
Carlos Jaime C. De Leon

Reputation: 2896

found this thread https://github.com/iamkun/dayjs/issues/1713 there are some workaround if you are interested, the one I might end up using is this

new Intl.DateTimeFormat('en-AU', {
                            timeZone: 'Australia/Perth',
                            timeZoneName: 'short',
                          })
                            .format(Date.now()).split(' ')[1]

enter image description here

Upvotes: 1

Bilal Butt
Bilal Butt

Reputation: 1192

in addition to above answer, to get the timezone name, pass tripple zzz it will return full timezone name

dayjs().tz("Europe/Paris").format("DD/MM/YYYY zzz"); // 14/12/2023 Central European Standard Time

Upvotes: 0

mrl
mrl

Reputation: 1536

The z formatting option is added in 1.9.0 version of dayjs: https://github.com/iamkun/dayjs/pull/1069

Update the newest version and set up the plugins correctly, which should work. Example below:

var dayjs = require("dayjs")
var utc = require("dayjs/plugin/utc")
var timezone = require("dayjs/plugin/timezone")
var advanced = requires("dayjs/plugin/advancedFormat")

dayjs.extend(timezone)
dayjs.extend(utc)
dayjs.extend(advanced)
dayjs().tz('Europe/Paris').format('DD/MM/YYYY z')

Upvotes: 33

Related Questions