npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@luminati-io/node-time

v0.12.0

Published

"time.h" bindings for Node.js

Downloads

167

Readme

node-time

"time.h" bindings for Node.js.

Build Status Build Status

This module offers simple bindings for the C time.h APIs. It also offers an extended native Date object with getTimezone() and setTimezone() functions, which aren't normally part of JavaScript.

Installation

node-time is available through npm:

$ npm install time

Example

const time = require('time');

// Create a new Date instance, representing the current instant in time
const now = new time.Date();

now.setTimezone("America/Los_Angeles");
// `.getDate()`, `.getDay()`, `.getHours()`, etc.
// will return values according to UTC-8

now.setTimezone("America/New_York");
// `.getDate()`, `.getDay()`, `.getHours()`, etc.
// will return values according to UTC-5


// You can also set the timezone during instantiation
const azDate = new time.Date(2010, 0, 1, 'America/Phoenix');
azDate.getTimezone(); // 'America/Phoenix'

Extending the global Date object

node-time provides a convenient time.Date object, which is its own Date constructor independent from your own (or the global) Date object. There are often times, however, when you would like the benefits of node-time on all Date instances. To extend the global Date object, simply pass it in as an argument to the node-time module when requiring:

const time = require('time')(Date);

const d = new Date();
d.setTimezone('UTC');

API

Date() -> Date

new time.Date()

new time.Date(millisecondsFromUTC)

new time.Date(dateString [, timezone ])

new time.Date(year, month, day [, hour, minute, second, millisecond ] [, timezone ])

A special Date constructor that returns a "super" Date instance, that has magic timezone capabilities! You can also pass a timezone as the last argument in order to have a Date instance in the specified timezone.

const now = new time.Date();
const another = new time.Date('Aug 9, 1995', 'UTC');
const more = new time.Date(1970, 0, 1, 'Europe/Amsterdam');

date.setTimezone(timezone [, relative ]) -> Undefined

Sets the timezone for the Date instance. By default this function makes it so that calls to getHours(), getDays(), getMinutes(), etc. will be relative to the timezone specified. If you pass true in as the second argument, then instead of adjusting the local "get" functions to match the specified timezone, instead the internal state of the Date instance is changed, such that the local "get" functions retain their values from before the setTimezone call.

date.setTimezone("America/Argentina/San_Juan")

// Default behavior:
const a = new time.Date();
a.toString();
// 'Wed Aug 31 2011 09:45:31 GMT-0700 (PDT)'
a.setTimezone('UTC');
a.toString();
// 'Wed Aug 31 2011 16:45:31 GMT+0000 (UTC)'

// Relative behavior:
const b = new time.Date();
b.toString();
// 'Wed Aug 31 2011 10:48:03 GMT-0700 (PDT)'
b.setTimezone('UTC', true);
b.toString();
// 'Wed Aug 31 2011 10:48:03 GMT+0000 (UTC)'

date.getTimezone() -> String

Returns a String containing the currently configured timezone for the date instance. This must be called after setTimezone() has been called.

date.getTimezone();
// "America/Argentina/San_Juan"

date.getTimezoneAbbr() -> String

Returns the abbreviated timezone name, also taking daylight savings into consideration. Useful for the presentation layer of a Date instance.

date.getTimezoneAbbr();
// "ART"

Date.parse(dateStr [, timezone ]) -> Number

Same as the native JavaScript Date.parse() function, only this version allows for a second, optional, timezone argument, which specifies the timezone in which the date string parsing will be resolved against. This function is also aliased as time.parse().

time.Date.parse("1970, January 1");  // <- Local Time
// 28800000
time.Date.parse("1970, January 1", "Europe/Copenhagen");
// -3600000
time.Date.parse("1970, January 1", "UTC");
// 0

extend(date) -> Date

Transforms a "regular" Date instance into one of node-time's "extended" Date instances.

const d = new Date();
// `d.setTimezone()` does not exist...
time.extend(d);
d.setTimezone("UTC");

time() -> Number

Binding for time(). Returns the number of seconds since Jan 1, 1900 UTC. These two are equivalent:

time.time();
// 1299827226
Math.floor(Date.now() / 1000);
// 1299827226

tzset(timezone) -> Object

Binding for tzset(). Sets up the timezone information that localtime() will use based on the specified timezone variable, or the current process.env.TZ value if none is specified. Returns an Object containing information about the newly set timezone, or throws an Error if no timezone information could be loaded for the specified timezone.

time.tzset('US/Pacific');
// { tzname: [ 'PST', 'PDT' ],
//   timezone: 28800,
//   daylight: 1 }

localtime(Number) -> Object

Binding for localtime(). Accepts a Number with the number of seconds since the Epoch (i.e. the result of time()), and returns a "broken-down" Object representation of the timestamp, according the the currently configured timezone (see tzset()).

time.localtime(Date.now()/1000);
// { seconds: 38,
//   minutes: 7,
//   hours: 23,
//   dayOfMonth: 10,
//   month: 2,
//   year: 111,
//   dayOfWeek: 4,
//   dayOfYear: 68,
//   isDaylightSavings: false,
//   gmtOffset: -28800,
//   timezone: 'PST' }

currentTimezone -> String

The currentTimezone property always contains a String to the current timezone being used by node-time. This property is reset every time the tzset() function is called. Individual time.Date instances may have independent timezone settings than what this one is...