node-ms模块
发布于 10 年前 作者 jx-zhou 4515 次浏览 最后一次编辑是 8 年前 来自 问答

看了一下ms模块的源码发现有一段不是很理解,求指点

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var y = d * 365.25;


function short(ms) {
	if (ms >= d) return Math.round(ms / d) + 'd';
	if (ms >= h) return Math.round(ms / h) + 'h';
	if (ms >= m) return Math.round(ms / m) + 'm';
	if (ms >= s) return Math.round(ms / s) + 's';
	return ms + 'ms';
}

/**
* Long format for `ms`.
*
* @param {Number} ms
* @return {String}
* @api private
*/

function long(ms) {
	return plural(ms, d, 'day')
	|| plural(ms, h, 'hour')
	|| plural(ms, m, 'minute')
	|| plural(ms, s, 'second')
	|| ms + ' ms';
}

/**
* Pluralization helper.
*/

function plural(ms, n, name) {
	if (ms < n) return;
	if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
	return Math.ceil(ms / n) + ' ' + name + 's';
}

这是部分源码,用于将long和short类型的时间的转换方法 为什么short直接了当的用了round四舍五入 而long写的这么麻烦,plural辅助方法,不就是用于四舍五入吗,为什么不直接用round,而是采用floor和ceil结合使用?

10 回复

为了加表示复数的 ‘s’

@leapon 我书读的少。你不要骗我0.0

@jx-zhou short 没有复数问题,分钟就是m

这里的复数是一种语法表现形式

@leapon 还是不怎么理解,能详细说一下吗。我理解的long和short只是能表示的长度不一致.

@hooboy 复数的语法表现形式?。不懂0.0求指教= =

@jx-zhou

short 的简洁表达的意思,一天的short 表示为 1d,五天的short 表示为 5d

long 的长格式(复杂)表达的意思,一天的long 表示为 1day,五天的long 表示为 5 days

@jx-zhou

你看的代码可能是从moment学来的:

http://momentjs.com/docs/

Units are case insensitive, and support plural and short forms: year (years, y), month (months, M), date (dates, D), hour (hours, h), minute (minutes, m), second (seconds, s), millisecond (milliseconds, ms).

@leapon 哦。明白了,原来是这个意思。3Q

@leapon 好的。我去看看

回到顶部