123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- /*!
- * JavaScript TimeSpan Library
- *
- * Copyright (c) 2010 Michael Stum, http://www.Stum.de/
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- /*global window: false */
- "use strict";
- (function () {
- // Constructor function, all parameters are optional
- var TimeSpan = window.TimeSpan = function (milliseconds, seconds, minutes, hours, days) {
- var version = "1.2",
- // Millisecond-constants
- msecPerSecond = 1000,
- msecPerMinute = 60000,
- msecPerHour = 3600000,
- msecPerDay = 86400000,
- // Internally we store the TimeSpan as Milliseconds
- msecs = 0,
- // Helper functions
- isNumeric = function (input) {
- return !isNaN(parseFloat(input)) && isFinite(input);
- };
- // Constructor Logic
- if (isNumeric(days)) {
- msecs += (days * msecPerDay);
- }
- if (isNumeric(hours)) {
- msecs += (hours * msecPerHour);
- }
- if (isNumeric(minutes)) {
- msecs += (minutes * msecPerMinute);
- }
- if (isNumeric(seconds)) {
- msecs += (seconds * msecPerSecond);
- }
- if (isNumeric(milliseconds)) {
- msecs += milliseconds;
- }
- // Addition Functions
- this.addMilliseconds = function (milliseconds) {
- if (!isNumeric(milliseconds)) {
- return;
- }
- msecs += milliseconds;
- };
- this.addSeconds = function (seconds) {
- if (!isNumeric(seconds)) {
- return;
- }
- msecs += (seconds * msecPerSecond);
- };
- this.addMinutes = function (minutes) {
- if (!isNumeric(minutes)) {
- return;
- }
- msecs += (minutes * msecPerMinute);
- };
- this.addHours = function (hours) {
- if (!isNumeric(hours)) {
- return;
- }
- msecs += (hours * msecPerHour);
- };
- this.addDays = function (days) {
- if (!isNumeric(days)) {
- return;
- }
- msecs += (days * msecPerDay);
- };
- // Subtraction Functions
- this.subtractMilliseconds = function (milliseconds) {
- if (!isNumeric(milliseconds)) {
- return;
- }
- msecs -= milliseconds;
- };
- this.subtractSeconds = function (seconds) {
- if (!isNumeric(seconds)) {
- return;
- }
- msecs -= (seconds * msecPerSecond);
- };
- this.subtractMinutes = function (minutes) {
- if (!isNumeric(minutes)) {
- return;
- }
- msecs -= (minutes * msecPerMinute);
- };
- this.subtractHours = function (hours) {
- if (!isNumeric(hours)) {
- return;
- }
- msecs -= (hours * msecPerHour);
- };
- this.subtractDays = function (days) {
- if (!isNumeric(days)) {
- return;
- }
- msecs -= (days * msecPerDay);
- };
- // Functions to interact with other TimeSpans
- this.isTimeSpan = true;
- this.add = function (otherTimeSpan) {
- if (!otherTimeSpan.isTimeSpan) {
- return;
- }
- msecs += otherTimeSpan.totalMilliseconds();
- };
- this.subtract = function (otherTimeSpan) {
- if (!otherTimeSpan.isTimeSpan) {
- return;
- }
- msecs -= otherTimeSpan.totalMilliseconds();
- };
- this.equals = function (otherTimeSpan) {
- if (!otherTimeSpan.isTimeSpan) {
- return;
- }
- return msecs === otherTimeSpan.totalMilliseconds();
- };
- // Getters
- this.totalMilliseconds = function (roundDown) {
- var result = msecs;
- if (roundDown === true) {
- result = Math.floor(result);
- }
- return result;
- };
- this.totalSeconds = function (roundDown) {
- var result = msecs / msecPerSecond;
- if (roundDown === true) {
- result = Math.floor(result);
- }
- return result;
- };
- this.totalMinutes = function (roundDown) {
- var result = msecs / msecPerMinute;
- if (roundDown === true) {
- result = Math.floor(result);
- }
- return result;
- };
- this.totalHours = function (roundDown) {
- var result = msecs / msecPerHour;
- if (roundDown === true) {
- result = Math.floor(result);
- }
- return result;
- };
- this.totalDays = function (roundDown) {
- var result = msecs / msecPerDay;
- if (roundDown === true) {
- result = Math.floor(result);
- }
- return result;
- };
- // Return a Fraction of the TimeSpan
- this.milliseconds = function () {
- return msecs % 1000;
- };
- this.seconds = function () {
- return Math.floor(msecs / msecPerSecond) % 60;
- };
- this.minutes = function () {
- return Math.floor(msecs / msecPerMinute) % 60;
- };
- this.hours = function () {
- return Math.floor(msecs / msecPerHour) % 24;
- };
- this.days = function () {
- return Math.floor(msecs / msecPerDay);
- };
- // Misc. Functions
- this.getVersion = function () {
- return version;
- };
- };
- // "Static Constructors"
- TimeSpan.FromSeconds = function (seconds) {
- return new TimeSpan(0, seconds, 0, 0, 0);
- };
- TimeSpan.FromMinutes = function (minutes) {
- return new TimeSpan(0, 0, minutes, 0, 0);
- };
- TimeSpan.FromHours = function (hours) {
- return new TimeSpan(0, 0, 0, hours, 0);
- };
- TimeSpan.FromDays = function (days) {
- return new TimeSpan(0, 0, 0, 0, days);
- };
- TimeSpan.FromDates = function (firstDate, secondDate, forcePositive) {
- var differenceMsecs = secondDate.valueOf() - firstDate.valueOf();
- if(forcePositive === true) {
- differenceMsecs = Math.abs(differenceMsecs);
- }
- return new TimeSpan(differenceMsecs, 0, 0, 0, 0);
- };
- }());
|