如何将秒数分别转换为年,月,日,小时,分钟?

时间:2015-06-06 05:31:40

标签: javascript

我实现了这个逻辑,我将 Moment.js 的2个日期和时间之间的差异作为秒,我需要将这些秒转换为1 Year 3 Months 10 Days 5 Hours 45 Minutes格式。

var numyears = Math.floor(seconds / 31536000);
var nummonths = Math.floor((seconds % 31536000) / 2628000);
var numdays = Math.floor(((seconds % 31536000) % 2628000) / 86400);
var numhours = Math.floor((((seconds % 31536000) % 2628000) % 86400)/3600);
var numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);

我得到的正确值最多可达数天,但从几小时开始就有问题。

1 个答案:

答案 0 :(得分:1)

日期和日历是政治性的,并不总是与简单的算术相匹配。我工作过的大多数语言都是为你解决这个问题的,据我所知,JavaScript就是这样做的。 (请注意,我们将在2015年6月30日的日历中添加另一个闰秒 - http://en.wikipedia.org/wiki/Leap_second。)

鉴于所有这些,这个答案非常接近,因为它没有考虑月份,闰日或闰秒的长度。但是,它是:

var x = new Date('2015-02-26 12:32:54-0600'); // or if you have milliseconds, use that instead
var y = new Date('2015-03-19 01:22:09-0600');
var z = new Date(y-z);
z;
// returns "Wed Jan 21 1970 06:49:15 GMT-0600 (CST)"
// now compare this with epoch
var epoch = new Date('1970-01-01 00:00:00-0600');
var diff_years = z.getYear() - epoch.getYear();
var diff_month = z.getMonth() - epoch.getMonth();
var diff_days = z.getDate() - epoch.getDate();
var diff_hours = z.getHours() - epoch.getHours();
var diff_minutes = z.getMinutes() - epoch.getMinutes();