我想使用JavaScript計算從我的生日以(年,月,日,小時,分鐘,秒)形式流逝的時間。使用javascript計算已用時間
例如,我的出生日期是1989年10月15日00時00分00秒。因此,從我的出生日期算起的時間是,
22 years 5 months 10 days 19 hours 25 minutes 25 seconds
我想使用JavaScript代碼實現相同的輸出。在這種情況下,任何鏈接都會有幫助。
我想使用JavaScript計算從我的生日以(年,月,日,小時,分鐘,秒)形式流逝的時間。使用javascript計算已用時間
例如,我的出生日期是1989年10月15日00時00分00秒。因此,從我的出生日期算起的時間是,
22 years 5 months 10 days 19 hours 25 minutes 25 seconds
我想使用JavaScript代碼實現相同的輸出。在這種情況下,任何鏈接都會有幫助。
嘗試這樣:
var now = new Date();
var bDay = new Date(1989, 10, 15);
var elapsedT = now - bDay; // in ms
讀MDN詢問。這會給你一些想法如何格式化結果。
忘了提及...如果您不喜歡處理JS Date API,請查看http://momentjs.com/。該庫包含一些明智的默認操作。 – 2012-03-25 14:22:34
這不適合我。我需要'var elapsedT = now - bDay'代替 – nishantjr 2016-02-08 05:03:05
@nishantjr謝謝,調整。 – 2016-02-08 07:17:41
看看JavaScript Date object。具體而言,在該網頁上,找到「計算經過時間」部分(接近底部):
// using static methods
var start = Date.now();
// the event you'd like to time goes here:
doSomethingForALongTime();
var end = Date.now();
var elapsed = end - start; // time in milliseconds
在你的情況下,start
將是一個給定的日期:
var start = new Date(1989,10,15);
如果你想要計算到天數甚至幾周,只需從生日時間戳中減去當前時間戳,然後再將數字除以組件時間單位即可。
但是,如果您需要數月和數年,由於一個月內的可變天數,情況會更復雜一些。
也許是爲了去了解它的最簡單的方法如下:
當您想要查找給定月份中有多少天時,會出現併發症。這可以幫助:
function getDaysInMonth(month,year) {
if(typeof year == "undefined") year = 1999; // any non-leap-year works as default
var currmon = new Date(year,month),
nextmon = new Date(year,month+1); // no need to check for December overflow - JS does this automatically
return Math.floor((nextmon.getTime()-currmon.getTime())/24*3600);
}
這應該足以讓您走上正確的軌道。讓我知道你是否需要任何幫助。
首先,你所要求的有點不準確。我們知道一分鐘= 60秒,一小時= 60分鐘......然後停在這裏。一天的時間可以是24小時,也可以是24小時以上,這取決於你如何對待閏年,「一個月」甚至不會精確地表示時間跨度。
因此:要麼讓你的時間跨度爲小時,或建立一個近似處理閏年等日期和日期的差異(時間跨度)是不同的概念,需要始終區別對待。
無論如何,對於代碼,我只是去:
var ms = new Date() - yourBirthDate;
var secs = ms/1000;
var minutes = secs /60 ; secs = secs % 60;
var hours = minutes/60 ; minutes = minutes % 60;
// and so on if you want
你是對的!但我相信這就是挑戰! – 2012-03-25 14:44:36
面臨的挑戰是以一種可以回答的方式制定您的問題。 :)對於「多長時間問題」(如果您是精確的話)的精確答案只能用國際單位制表示,或者以幾個小時或幾天(但不包括太陽日)的倍數表示。如果你在幾個月後,你只能說,從那以後有多少個月已經開始。當我說我23歲的時候,我只是說我已經打了很多次我的生日,我不是指一個精確的時間跨度。 – Kos 2012-03-25 19:44:29
因爲我以前的答案已經讓人缺少了這一點完全,這裏是一個PHP代碼端口我必須做同樣的事情:
function getDaysInMonth(month,year) {
if(typeof year == "undefined") year = 1999; // any non-leap-year works as default
var currmon = new Date(year,month),
nextmon = new Date(year,month+1);
return Math.floor((nextmon.getTime()-currmon.getTime())/(24*3600*1000));
}
function getDateTimeSince(target) { // target should be a Date object
var now = new Date(), diff, yd, md, dd, hd, nd, sd, out = [];
diff = Math.floor(now.getTime()-target.getTime()/1000);
yd = target.getFullYear()-now.getFullYear();
md = target.getMonth()-now.getMonth();
dd = target.getDate()-now.getDate();
hd = target.getHours()-now.getHours();
nd = target.getMinutes()-now.getMinutes();
sd = target.getSeconds()-now.getSeconds();
if(md < 0) {yd--; md += 12;}
if(dd < 0) {
md--;
dd += getDaysInMonth(now.getMonth()-1,now.getFullYear());
}
if(hd < 0) {dd--; hd += 24;}
if(md < 0) {hd--; md += 60;}
if(sd < 0) {md--; sd += 60;}
if(yd > 0) out.push(yd+" year"+(yd == 1 ? "" : "s"));
if(md > 0) out.push(md+" month"+(md == 1 ? "" : "s"));
if(dd > 0) out.push(dd+" day"+(dd == 1 ? "" : "s"));
if(hd > 0) out.push(hd+" hour"+(hd == 1 ? "" : "s"));
if(nd > 0) out.push(nd+" minute"+(nd == 1 ? "" : "s"));
if(sd > 0) out.push(sd+" second"+(sd == 1 ? "" : "s"));
return out.join(" ");
}
例子:
getDateTimeSince(new Date(1992,1,6,22,30,00));
// my date of birth - near enough half past ten in the evening on Feb 6th 1992
> 20 years 1 month 18 days 17 hours 23 minutes 7 seconds
我相信這是正是 OP要求什麼。
謝謝科林克...這正是我正在尋找的... – 2012-07-28 07:56:13
感謝此代碼..這是一個好的開始。對於任何可能使用這個的人,我不得不顛倒減法的順序。此外,除非我的邏輯存在深夜瑕疵,否則我認爲有條件進位操作的順序也應該反轉(最先顯着的時間跨度)。最後,差異沒有被使用..不知道爲什麼在那裏。無論如何,偉大的貢獻! – snapfractalpop 2012-11-17 06:01:24
我沒有爲我工作。我總是得到一些隨機值... – Moha 2013-02-19 17:24:11
使用Moment.js解析,驗證,操作和格式化Javascript中的日期。現在只有5.5k,所以你自己做這種低級代碼不是很好的理由。
function getDaysInMonth(month,year) {
if(typeof year == "undefined") year = 1999; // any non-leap-year works as default
var currmon = new Date(year,month),
nextmon = new Date(year,month+1);
return Math.floor((nextmon.getTime()-currmon.getTime())/(24*3600*1000));
}
function getDateTimeSince(target) { // target should be a Date object
var now = new Date(), yd, md, dd, hd, nd, sd, out = [];
yd = now.getFullYear()-target.getFullYear();
md = now.getMonth()-target.getMonth();
dd = now.getDate()-target.getDate();
hd = now.getHours()-target.getHours();
nd = now.getMinutes()-target.getMinutes();
sd = now.getSeconds()-target.getSeconds();
if(md < 0) {yd--; md += 12;}
if(dd < 0) {
md--;
dd += getDaysInMonth(now.getMonth()-1,now.getFullYear());
}
if(hd < 0) {dd--; hd += 24;}
if(nd < 0) {hd--; nd += 60;}
if(sd < 0) {nd--; sd += 60;}
if(yd > 0) out.push(yd+" year"+(yd == 1 ? "" : "s"));
if(md > 0) out.push(md+" month"+(md == 1 ? "" : "s"));
if(dd > 0) out.push(dd+" day"+(dd == 1 ? "" : "s"));
if(hd > 0) out.push(hd+" hour"+(hd == 1 ? "" : "s"));
if(nd > 0) out.push(nd+" minute"+(nd == 1 ? "" : "s"));
if(sd > 0) out.push(sd+" second"+(sd == 1 ? "" : "s"));
return out.join(" ");
}
這是一個不同的版本Kolink的代碼。有一些在他的錯誤是無法正常工作停止這個腳本...
警告:此代碼繼續被破壞 - 它不處理第二次計算的分鐘邊界,以及分鐘計算的小時邊界等等。例如,假設現在是11:31:05(上午11:31和5秒),我們用11:30:55調用它,它會說經過的時間是1分10秒,而事實上這兩個時間戳之間的差異是:10秒。 – marni 2014-05-04 15:55:38
我喜歡這一個:
function lifeSpan(t0) {var x=new Date()-t0, a=x, i=0,s=0,m=0,h=0,j=0;
if(a>=1){i=a%1000;a=(a-i)/1000;
if(a>=1){s=a%60;a=(a-s)/60;
if(a>=1){m=a%60;a=(a-m)/60;
if(a>=1){h=a%24;a=(a-h)/24;
if(a>=1){j=a;//...
}}}}}
return 'Elapsed: '+i+'ms '+s+'s '+m+'mn '+h+'h '+j+'j (or '+x+'ms).';}
下面是一個簡單的方法來計算經過時間。出身日期,如今以毫秒爲單位
這是要做的代碼。
Date.prototype.getElapsedTime = function() {
var diffDate = new Date(Date.now() - this);
return "Elapsed Time: Years: " + (diffDate.getFullYear() - 1970) + ", Months: " + diffDate.getMonth() + ", Days: " + (diffDate.getDate() - 1) + ", Hours: " + diffDate.getHours() + ", Minutes: " + diffDate.getMinutes() + ", Seconds: " + diffDate.getSeconds();
};
var from = new Date("01/08/1986 04:07:00");
document.getElementById("result").innerHTML = from.getElapsedTime();
下面是一些你可以玩的:https://jsfiddle.net/nishchal/u8gt2gwq/4/
需要兩個JavaScript Date對象:一個代表,代表你的出生日期爲當前日期和一個。然後你需要通過比較兩個對象來編寫代碼來構建該字符串。 – j4y 2012-03-25 14:18:00
是的,我已經實現了我可以計算小時,分鐘和秒的部分。猜猜這是更容易的部分,因爲我努力計算日子和月份。 – 2012-03-25 14:42:08