countScheduled = function countScheduled(schedule) {
	var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};


	if (typeof schedule !== 'string') {
		throw 'Can\'t start scheduler, "schedule" is a required parameter';
	}

	// timezone is in ISO8601 timezone format
	options = mergeObjects(_extends({}, DEFAULT_COUNTDOWN_OPTIONS, { timezone: null }), options);

	// get timezone offset
	var timezone = options.timezone ? toTimezoneOffset(options.timezone) : null;

	// counter api
	var counter = createCounter({
		waiting: null,
		nextScheduledDate: null,
		previouslyScheduledDate: null,
		onrepeat: function onrepeat(nextDate, lastDate) {},
		onresume: function onresume(nextDate) {},
		onwait: function onwait(sinceDate) {}
	});

	// date scheduled during last check
	var lastDate = undefined;
	var nextDate = null;

	// get offset
	getServerOffset(options.server, function (offset) {

		counter.offset = offset;

		var count = function count() {

			var now$$1 = offsetDate(offset);

			if (timezone !== null) {
				now$$1 = timezoneDate(now$$1, timezone);
			}

			// get next date
			nextDate = getNextScheduledDate(now$$1, schedule);

			// if no next date, we are in waiting state
			counter.waiting = nextDate === null;

			// if target is null call `wait` method
			if (counter.waiting) {

				// if is waiting initially
				if (lastDate === undefined) {
					lastDate = null;
				}

				// set output to zero
				counter.value = new Array(options.format.length).fill(0);

				// remember scheduled date if set
				if (counter.nextScheduledDate) {
					counter.previouslyScheduledDate = clone$1(counter.nextScheduledDate);
				}

				// update counter dates
				counter.nextScheduledDate = nextDate === null ? null : clone$1(nextDate);

				// update counter
				counter.onwait(counter.previouslyScheduledDate ? clone$1(counter.previouslyScheduledDate) : null);

				// we'll stop here but we'll leave the counter running
				return;
			}

			// update counter dates
			counter.nextScheduledDate = clone$1(nextDate);

			// just now we did not have a date (last date is always the date from the previous loop),
			// but now have, so we just woke up
			if (lastDate === null) {
				counter.onresume(clone$1(nextDate));
			}

			// if no last date or it's not the first loop and its not the same as the next date we are looping
			if (lastDate === null || lastDate !== undefined && !sameTime(lastDate, nextDate)) {

				counter.onrepeat(clone$1(nextDate), lastDate ? clone$1(lastDate) : null);

				if (lastDate) {
					counter.previouslyScheduledDate = clone$1(lastDate);
				}
			}

			// remember last date
			lastDate = clone$1(nextDate);

			// calculate new duration
			counter.value = dateDiff(now$$1, nextDate, options.format, options.cascade);
			counter.onupdate(counter.value);
		};

		// start our counter
		counter.timer = setTimer(count, options.interval, { autostart: false });

		// ready!
		counter.complete = true;
		counter.onload();

		// go!
		counter.timer.start();
	});

	return counter;
}
Count using a predefined schedule
@param schedule
@param options
@returns object