TimeUnit

A TimeUnit represents time durations at a given unit of granularity and provides utility methods to convert across units, and to perform timing and delay operations in these units. A TimeUnit does not maintain time information, but only helps organize and use time representations that may be maintained separately across various contexts.

Dentro del código relativamente intrascendente que nace del (nunca suficiente) tiempo de ocio, comparto un intento de port de la clase TimeUnit de Java.

Utilizando esta clase se evita generar referencias de tiempo poco claras (tanto en unidad como en cantidad) al codificar con unidades de tiempo. Dentro de JavaScript esto puede verse mayormente con las funciones globales setTimeout y setInterval.

setTimeout(function() {
	app.post.doUpdate();
	app.msg.check();
}, 3 * 60 * 1000); // 3 minutos

// o en su defecto
setTimeout(function() {
	app.post.doUpdate();
	app.msg.check();
}, 180000); // 3 minutos

Utilizando TimeUnit:

setTimeout(function() {
	app.post.doUpdate();
	app.msg.check();
}, TimeUnit.MINUTES.toMillis(3));

Además (para completar el “cover”) incluye la funcionalidad de sleep (presentada en una entrada anterior):

var d = new Date;
TimeUnit.SECONDS.sleep(5);
new Date - d; // 5000

Código fuente

/**
 * @author Aijoona
 */
var TimeUnit = (function() {
	var T, fixedPrecision;

	// output fixed precision
	fixedPrecision = 3;

	// dict
	T = {
		MILLIS: function(n) {
			return n;
		},
		SECONDS: function(n) {
			return n * 1000;
		},
		MINUTES: function(n) {
			return n * 1000 * 60;
		}
	}

	function proxy(type) {
		function getMillis(n) {
			return T[type](n);
		}

		return {
			toMillis: function(n) {
				return getMillis(n);
			},
			toSeconds: function(n) {
				return (getMillis(n) / 1000).toFixed(fixedPrecision);
			},
			toMinutes: function(n) {
				return (getMillis(n) / (1000 * 60)).toFixed(fixedPrecision);
			},
			sleep: function(n) {
				var d = +new Date + getMillis(n);
				while (+new Date < d);
			}
		}
	}
	return {
		getFixedPrecision: function() {
			return fixedPrecision;
		},
		// sets output fixed precision
		setFixedPrecision: function(n) {
			fixedPrecision = parseInt(n);
			return this;
		},
		MILLIS: proxy('MILLIS'),
		SECONDS: proxy('SECONDS'),
		MINUTES: proxy('MINUTES')
	}
})();


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Comment

You may use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>