2010-07-28 18 views
1

我在想如果有人知道我怎麼能解析這種日期格式:2010-07-26T18:02:46 + 0000js格式的相對時間函數YYYY-MM-DDTHH:MM:SS + 0000

進入相對時間,如「30.秒前」

我已經有一個函數,它會爲一個類似但不同的時間格式:

function relative_time(time_value, is_relative) { 
     var values = time_value.split(" "), 
      parsed_date = Date.parse(values[1] + " " + values[2] + ", " + values[5] + " " + values[3] + " UTC"), 
      date = new Date(parsed_date), 
      relative_to = new Date(), 
      r = '', 
      delta = parseInt((relative_to.getTime() - date.getTime())/1000); 

     var seconds = { 
      'from' : { 
      'minutes' : function(v) { return v * 60; }, 
      'hours' : function(v) { return this.minutes(v) * 60; }, 
      'days' : function(v) { return this.hours(v) * 24; }, 
      'weeks' : function(v) { return this.days(v) * 7; }, 
      'months' : function(v) { return this.weeks(v) * 4.34812141; }, 
      'years' : function(v) { return this.months(v) * 12; } 
      }, 
      'to' : { 
      'minutes' : function(v) { return v/60; }, 
      'hours' : function(v) { return this.minutes(v)/60; }, 
      'days' : function(v) { return this.hours(v)/24; }, 
      'weeks' : function(v) { return this.days(v)/7; }, 
      'months' : function(v) { return this.weeks(v)/4.34812141; }, 
      'years' : function(v) { return this.months(v)/12; } 
      } 
     }; 

     if (!is_relative) 
      return formatTime(date) + ' ' + formatDate(date); 

     if (delta < 30) 
      return 'less than a minute ago'; 
     var minutes = parseInt(seconds.to.minutes(delta)+0.5); 
     if (minutes <= 1) 
      return 'about a minute ago'; 
     var hours = parseInt(seconds.to.hours(delta)+0.5); 
     if (hours < 1) 
      return minutes + ' minutes ago'; 
     if (hours == 1) 
      return 'about an hour ago'; 
     var days = parseInt(seconds.to.days(delta)+0.5); 
     if (days < 1) 
      return hours + ' hours ago'; 
     if (days==1) 
      return formatTime(date) + ' yesterday'; 
     var weeks = parseInt(seconds.to.weeks(delta)+0.5); 
     if (weeks < 2) 
      return formatTime(date) + ' ' + days + ' days ago'; 
     var months = parseInt(seconds.to.months(delta)+0.5); 
     if (months < 2) 
      return weeks + ' weeks ago'; 
     var years = parseInt(seconds.to.years(delta)+0.5); 
     if (years < 2) 
      return months + ' months ago'; 
     return years + ' years ago'; 

     function formatTime(date) { 
      var hour = date.getHours(), 
       min = date.getMinutes() + "", 
       ampm = 'AM'; 

      if (hour >= 12) ampm = 'PM'; 
      if (hour > 12) hour -= 12; 

      if (min.length == 1) { 
       min = '0' + min; 
      } 

      return hour + ':' + min + ' ' + ampm; 
     } 
}; 

格式此功能將是:週五2006年11月02:53:43 +0000

如何更改此腳本以使用新的時間格式?在這個階段,這有點超出我的想法,我渴望學習。

謝謝

+0

我聞twitterjs代碼。 – 2010-07-28 01:40:02

+0

是的,它當然是,我做了一個插件嘰嘰喳喳和使用它的功能,現在我正在爲我的網站我的facebook插件工作! – 2010-07-28 01:46:27

+0

這是一種破碎的問題,在谷歌代碼項目中檢查第10個問題......「某人」已經修復了這個問題,顯然是爲了原作者的懊惱。 http://code.google.com/p/twitterjs/issues/detail?id=10 – 2010-07-28 01:48:02

回答

3

我不知道,但如果你想使用jQuery:

There is a jQuery plugin for it.

+0

但twitterjs是圖書館不可知論的,也許他正在修復它,並希望保持這種方式。無論哪種方式,很容易解決沒有庫。 – 2010-07-28 01:46:24

+0

這真的是一個非常酷的插件,謝謝你! – 2010-07-28 02:15:29

0

看看這個工程...

var fuzzyFacebookTime = (function(){ 

    fuzzyTime.defaultOptions={ 
    // time display options 
    relativeTime : 48, 
    // language options 
    monthNames : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 
    amPm : ['AM', 'PM'], 
    ordinalSuffix : function(n) {return ['th','st','nd','rd'][n<4 || (n>20 && n % 10<4) ? n % 10 : 0]} 
    } 

    function fuzzyTime (timeValue, options) { 

    var options=options||fuzzyTime.defaultOptions, 
     date=parseDate(timeValue), 
     delta=parseInt(((new Date()).getTime()-date.getTime())/1000), 
     relative=options.relativeTime, 
     cutoff=+relative===relative ? relative*60*60 : Infinity; 

    if (relative===false || delta>cutoff) 
     return formatTime(date, options)+' '+formatDate(date, options); 

    if (delta<60) return 'less than a minute ago'; 
    var minutes=parseInt(delta/60 +0.5); 
    if (minutes <= 1) return 'about a minute ago'; 
    var hours=parseInt(minutes/60 +0.5); 
    if (hours<1) return minutes+' minutes ago'; 
    if (hours==1) return 'about an hour ago'; 
    var days=parseInt(hours/24 +0.5); 
    if (days<1) return hours+' hours ago'; 
    if (days==1) return formatTime(date, options)+' yesterday'; 
    var weeks=parseInt(days/7 +0.5); 
    if (weeks<2) return formatTime(date, options)+' '+days+' days ago'; 
    var months=parseInt(weeks/4.34812141 +0.5); 
    if (months<2) return weeks+' weeks ago'; 
    var years=parseInt(months/12 +0.5); 
    if (years<2) return months+' months ago'; 
    return years+' years ago'; 
    } 

    function parseDate (str) { 
    var v=str.replace(/[T\+]/g,' ').split(' '); 
    return new Date(Date.parse(v[0] + " " + v[1] + " UTC")); 
    } 

    function formatTime (date, options) { 
    var h=date.getHours(), m=''+date.getMinutes(), am=options.amPm; 
    return (h>12 ? h-12 : h)+':'+(m.length==1 ? '0' : '')+m+' '+(h<12 ? am[0] : am[1]); 
    } 

    function formatDate (date, options) { 
    var mon=options.monthNames[date.getMonth()], 
     day=date.getDate(), 
     year=date.getFullYear(), 
     thisyear=(new Date()).getFullYear(), 
     suf=options.ordinalSuffix(day); 

    return mon+' '+day+suf+(thisyear!=year ? ', '+year : ''); 
    } 

    return fuzzyTime; 

}()); 
+0

我如何通過這個數據?我嘗試通過fuzzyTime();並打破...一些變量是未定義的。 – 2010-07-29 11:46:56

+0

fuzzyFacebookTime(「2010-07-26T18:02:46 + 0000」); – 2010-07-29 19:39:11

+0

看起來不起作用只是返回NaN – 2010-08-05 12:13:00