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

@barinbritva/add-to-calendar

v1.3.2

Published

[![Dependencies counter](https://img.shields.io/badge/dependencies-none-green?style=flat-square)](https://github.com/barinbritva/add-to-calendar/blob/master/package.json) [![License](https://img.shields.io/npm/l/micromatch?style=flat-square)](https://gith

Downloads

92

Readme

📅 Add to Calendar

Dependencies counter License

Create event links to add them to a calendar.

Supported services: Outlook, Office365, Google and Yahoo. You are also able to use ICalendar to create downloadable links to ics files.

🚀 Getting started

Install package:

npm install --save @barinbritva/add-to-calendar

Import entities:

import {Event, Outlook, Google, MultiGenerator} from '@barinbritva/add-to-calendar'

Create an event:

const event = new Event(
  'Meet with friends',
  new Date(2021, 5, 18, 15, 0),
  new Date(2021, 5, 18, 17, 0),
  'It\'s Bill\'s birthday today!',
  'Blue Bottle Coffee, 300 S Broadway, Los Angeles'
)

Create link by link:

const outlookLink = new Outlook().createLink(event)
const googleLink = new Google().createLink(event)

console.log(outlookLink, googleLink)

Create a bunch of links:

// Create generators you are going to use
// Key names doesn't matter, it's up to you
const generators = {
  outlook: new Outlook(),
  office365: new Office365(),
  google: new Google(),
  yahoo: new Yahoo(),
  ics: new ICalendar()
}

const multiGenerator = new MultiGenerator(generators)

// Object of keys/values - key => link
const linksObject = multiGenerator.createLinks(event)
// Array (tuple) of pairs key/link - [key, link][]
const array = multiGenerator.createLinks(event, true)

Create an ics attachment:

Method createLink is designed to create links for anchors:

const icsLink = new ICalendar().createLink(event)
return <a href=`${icsLink}`>Download ics file</a>

To create attachable ics files, use createFile method:

const icsFile = new ICalendar().createFile(event)
// letter is a pseudo variable, read a doc of library you are using to send emails
letter.attach(Buffer.from(icsFile))

💡 Guides

Working with Event

Read Event API to learn how to create, reschedule an event and manage its attendees.

Working with time zones

The best practice to avoid troubles with time zones is to create all dates in UTC time zone. add-to-calendar will convert date\time to UTC anyway and calendar services convert them to user local machine time zone.

Server

If a server works in UTC time zone, create dates as usual:

new Date(2021, 5, 18, 15, 0)

If a server is not set to UTC time zone, use Date.UTC method. Before doing that, calculate date\time relatively to UTC:

// if a server is in GMT+3 time zone,
// add 3 hours to desired date\time
// new Date(2021, 5, 18, 15, 0) -> new Date(2021, 5, 18, 15 + 3, 0)
new Date(Date.UTC(2021, 5, 18, 18, 0))

To calculate date\time in UTC automatically use a library for working with time zones, like date-fns-tz, or use the following approach:

const date = new Date(2021, 5, 18, 15, 0)
new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000)

Tips:

  • To check if a server is set up to UTC time zone run new Date().getTimezoneOffset(). If the result is 0, everything is set up. If no, configure a server.
  • To force node.js use UTC time zone without setting up server time, add TZ=UTC environment variable during an app launch, for example: TZ=UTC node index.js.

Client

On a client side, it's an option to use Date as usual:

new Date(2021, 5, 18, 15, 0)

But calendar services use time zone not from user local machine, but from user settings at the service.

For example, if a user is in GMT+3 time zone and uses Google Calendar, which is set up in GMT+3 time zone, everything will be OK. But if Google Calendar is set up in GMT+5, the date\time will be shifted by 2 hours.

To avoid this pitfall, use technics from the section about server side.

🔙 Feedback

Your feedback is really important for the project. Please, use contacts from my profile to send your questions, suggestions, help requests and others. Also, feel free to use issues section to report bugs and problems.

🌟 Credits


MIT, see LICENSE for the details.