【问题标题】:get time since date in year, month, days, hour, minute, and seconds以年、月、日、小时、分钟和秒为单位获取自日期以来的时间
【发布时间】:2018-02-04 05:21:07
【问题描述】:

我想从 2016 年 11 月 28 日开始。 我希望时间显示为 1 年 2 个月 6 天 17 小时 19 分 36 秒。

var dateString = '11/28/2016';
var now = new Date();
var today = new Date(now.getYear(), now.getMonth(), now.getDate());
var yearNow = now.getYear();
var monthNow = now.getMonth();
var dateNow = now.getDate();
var dob = new Date(dateString.substring(6, 10),
    dateString.substring(0, 2) - 1,
    dateString.substring(3, 5)
);
var yearDob = dob.getYear();
var monthDob = dob.getMonth();
var dateDob = dob.getDate();
var time = {};
yearTime = yearNow - yearDob;
if (monthNow >= monthDob)
    var monthTime = monthNow - monthDob;
else {
    yearTime--;
    var monthTime = 12 + monthNow - monthDob;
}
if (dateNow >= dateDob)
    var dateTime = dateNow - dateDob;
else {
    monthTime--;
    var dateTime = 31 + dateNow - dateDob;

    if (monthTime < 0) {
        monthTime = 11;
        yearTime--;
    }
}
time = {
    years: yearTime,
    months: monthTime,
    days: dateTime
};
if (time.months < 9) {
    time.months = '0' + time.months;
}
if (time.days < 9) {
    time.days = '0' + time.days;
}

$('#cnt_year').text('0' + time.years);
$('#cnt_month').text(now);
$('#cnt_days').text(time.days);

它显示年、月和日,但我如何添加小时和分钟。

【问题讨论】:

  • 您的dateString 没有时间。你要假设 1200 万吗?
  • 使用框架可以更好地解决一些问题。看看 momentjs。
  • 使用框架可以更好地解决一些问题。看看 momentjs。
  • momentjs 的 diff() 函数正是你要找的
  • 使用框架可以更好地解决一些问题。看看 momentjs。

标签: javascript time


【解决方案1】:

鉴于一个月/所有月份只有 30 天。

	var dateString = '11/28/2016';
	var now = new Date();
	var today = new Date(now.getYear(), now.getMonth(), now.getDate());
	var yearNow = now.getYear();
	var monthNow = now.getMonth();
	var dateNow = now.getDate();
	var dob = new Date(dateString.substring(6, 10),
		dateString.substring(0, 2) - 1,
		dateString.substring(3, 5)
	);
		
	var nTotalDiff = Math.abs(now - dob);
	var oDiff = {};
	
	oDiff.years = Math.floor(nTotalDiff / 1000 / 60 / 60 / 24 / 30 / 12);
	nTotalDiff -= oDiff.years * 1000 * 60 * 60 * 24 * 30 * 12;
	
	oDiff.months = Math.floor(nTotalDiff / 1000 / 60 / 60 / 24 / 30);
	nTotalDiff -= oDiff.months * 1000 * 60 * 60 * 24 * 30;
	
	oDiff.days = Math.floor(nTotalDiff / 1000 / 60 / 60 / 24);
	nTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24;

	oDiff.hours = Math.floor(nTotalDiff / 1000 / 60 / 60);
	nTotalDiff -= oDiff.hours * 1000 * 60 * 60;

	oDiff.minutes = Math.floor(nTotalDiff / 1000 / 60);
	nTotalDiff -= oDiff.minutes * 1000 * 60;

	oDiff.seconds = Math.floor(nTotalDiff / 1000);	
		
	console.log( oDiff );

【讨论】:

    【解决方案2】:

    这是一个如何使用 moment.js 的 diff 和添加功能的示例,

        const today = moment();
        const dateString = moment('11/28/2016');
        const diffYears = today.diff(dateString, 'years');  // diff gives you the difference between two days in integer.
        dateString.add(diffYears, 'years');   // to get difference in month now, you first need to add `diffYears` to the dateString, same follows for the further calculations.
        const diffMonths = today.diff(dateString, 'months');
        dateString.add(diffMonths, 'months');
        const diffDays = today.diff(dateString, 'days');
        dateString.add(diffDays, 'days');
        const diffHours = today.diff(dateString, 'hours');
        dateString.add(diffHours, 'hours'); 
        const diffMinutes = today.diff(dateString, 'minutes');
        dateString.add(diffMinutes, 'minutes'); 
        const diffSeconds = today.diff(dateString, 'seconds');
    

    您可以在http://momentjs.com/docs/#/displaying/difference/找到更多示例

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 2012-05-24
      • 2011-05-23
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2012-01-19
      相关资源
      最近更新 更多