TypeError: moment().tz is not a function

JavascriptUnit TestingJasmineMomentjs

Javascript Problem Overview


When testing using jasmine, I am getting this error.

TypeError: moment.tz is not a function

My code that I try to test is

let myDate = moment().tz(undefined, vm.timeZone).format('YYYY-MM-DD'); 

Javascript Solutions


Solution 1 - Javascript

Fix

If you're using Node.js, you may accidentally be using

const moment = require('moment'); //moment

instead of

const moment = require('moment-timezone'); //moment-timezone

Also, make sure you have installed moment-timezone with

npm install moment-timezone --save

Explanation

The bug of requiring moment without timezones could occur by installing moment with require('moment'), later deciding to npm install moment-timezone, and then forgetting to update the require.

Solution 2 - Javascript

Below code for me...

import moment from 'moment';
import 'moment-timezone';

Solution 3 - Javascript

For Node.js, According to the original documentation: moment js documentation

You should do

npm install moment-timezone

Then use it like this

var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();

Solution 4 - Javascript

for Typescript: Works as of April 2021

import moment from 'moment';
import 'moment-timezone';

cont x = moment.tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss ZZ');

cont y = moment().isBetween(
            moment.tz('1-1-2021', 'America/Los_Angeles'),
            moment.tz('1-1-2021', 'America/Los_Angeles').add(2, 'hours'),

Solution 5 - Javascript

Error -> TypeError: (0 , moment_timezone_1.default) is not a function

This is typescript error, by default It's take moment as function

I fix this issue, by replacing

import moment from 'moment-timezone'

import * as moment from 'moment-timezone'

moment().tz("America/Los_Angeles").format()

Solution 6 - Javascript

I've encountered this problem too. It works for years, but after a refactor, it doesn't work. As I've investigated, [email protected] depends on moment@>=2.9.0, which might be different from moment itself.

In my case, moment-timezone uses [email protected], and moment itself version is 2.18.1. Causes moment-timezone decorated wrong version of moment.

I've change yarn.lock like this:

moment-timezone@0.5.13:
  version "0.5.13"
  resolved "https://arti-dev.ss.aws.fwmrm.net/api/npm/fw-npm/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90"
  integrity sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=
  dependencies:
    moment ">= 2.9.0"

moment@2.18.1, moment@>= 2.9.0:
  version "2.18.1"
  resolved "https://arti-dev.ss.aws.fwmrm.net/api/npm/fw-npm/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
  integrity sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=

moment & moment-timezone could be used substitute for each other in this case.

Solution 7 - Javascript

Use: moment-timezone

const moment = require('moment-timezone');
const time = moment.tz(1412144245453, 'America/Los_Angeles').format('MM/DD/YYYY h:mm a');
console.log("time : ", time);

Output: time : 09/30/2014 11:17 pm

Solution 8 - Javascript

Moment should be a function call. So use let myDate = moment().tz(...)

See https://momentjs.com/timezone/docs/ for more details.

EDIT

You should also ensure that you are including the timezone extension to the moment library either through the correct npm install and require (for Node) or the correct script tags (for general browser usage). See the linked documents for the libraries/scripts to include.

SECOND EDIT

Should anyone have scrolled this far on a question with a +120 accepted answer:

The suggestion that moment was a function and requires brackets refers to the un-edited version of the posted question which had the syntax

let myDate = moment.tz(undefined, vm.timeZone).format('YYYY-MM-DD');

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSanathView Question on Stackoverflow
Solution 1 - JavascriptMatt GoodrichView Answer on Stackoverflow
Solution 2 - JavascriptPurushottam SadhView Answer on Stackoverflow
Solution 3 - JavascriptGadaniView Answer on Stackoverflow
Solution 4 - JavascriptDavid DehghanView Answer on Stackoverflow
Solution 5 - JavascriptPiyush JindalView Answer on Stackoverflow
Solution 6 - JavascriptXu TongbinView Answer on Stackoverflow
Solution 7 - JavascriptSahil ThummarView Answer on Stackoverflow
Solution 8 - JavascriptJohnView Answer on Stackoverflow