2013-07-15 35 views
2

我在找到解决方案时只能从我的json时间戳获取日期和月份时遇到问题。我的JSON的样子:从时间戳得到日期和月份

{ 
"status": "ok", 
"posts": [ 
{ 
    "id": "21", 
    "title": "Title", 
    "date": "1374267600" 
} 
] 
} 

和Ajax调用:

$.ajax({ 
    url: , 
    async: false, 
    callback: 'callback', 
    crossDomain: true, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'jsonp', 
    timeout: 2000, 
    success: function (data, status) { 


     if (data !== undefined && data.posts !== undefined) { 

     $('#dates').append('<div id="date">' + item.date + '</div><div id="month">' + item.date + '</div>'); 
     }  
    } 
}); 

它只显示印章。你能帮我吗?

此外,如果你可以做到这一点在jsfiddle我真的很感激它!

+0

'item'从哪里来? – Pieter

+0

对不起彼得你是对的。有**项**的错误,即使我修好了 - 它不会正确显示我的邮票 – qqruza

回答

5

您需要将时间戳转换到一个约会对象。 请注意,您有因为JavaScript日期构造函数采用毫秒,而时间戳是在几秒钟内

months = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"]; 
timestamp = "1374267600"; 
var jsDate = new Date(timestamp*1000); 

$('#dates').append('<div id="date">' + jsDate.toDateString() + '</div>'+ 
'<div id="month">' + months[jsDate.getMonth()] + '</div>'); 

Fiddle

+0

它正在与1000乘以1000倍,当我乘以1000它显示后3天的日期。 –

0

该日期实际上是自1月1日凌晨零点以后的毫秒。 1970年,如果你使用

您可以转换毫秒字符串的日期对象在JavaScript中使用:

var d = new Date(item.date); 

然后你可以使用d.toUTCString()获得UTC格式的日期。

2

下面的函数将其改造成DDMMYY格式:

function unixEpochTime_TO_Date_DDMMYY (unixEpochTime, returnUTC) { 
    var year, month, day; 
    var dateObj = new Date (unixEpochTime * 1000); 

    if (returnUTC) { 
     year = dateObj.getUTCFullYear(); 
     month = dateObj.getUTCMonth(); 
     day  = dateObj.getUTCDate(); 
    } 
    else { 
     year = dateObj.getFullYear(); 
     month = dateObj.getMonth(); 
     day  = dateObj.getDate(); 
    } 

    //-- Month starts with 0, not 1. Compensate. 
    month  += 1; 

    /*-- Since we want DDMMYY, we need to trim the year and zero-pad 
     the day and month. 
     Note: Use YYMMDD, for sorting that makes sense. 
    */ 
    year = ("" + year) .slice (-2); 
    month = ("0" + month).slice (-2); 
    day  = ("0" + day) .slice (-2); 

    return day + month + year; 
} 

实用程序:

var obj = { 
    "status": "ok", 
    "posts": [ 
     { 
       "id": "21", 
       "title": "Title", 
       "date": "1374267600" 
     } 
    ] 
}; 

alert(unixEpochTime_TO_Date_DDMMYY(obj.posts[0].date, " Local")); 

JSFIDDLE

+0

谢谢John。你能帮我在单独的div中显示日期和月份吗? – qqruza

0
var date = Date.parse(item.date); 
var month = date.getMonth(); 
var day = date.getDay(); 
var year = date.getYear(); 
1

item.date是一个字符串,以及JavaScript的Date()接受数字,所以:

var ms = parseInt(item.posts[0].date, 10) * 1000, 
    date = new Date(ms), 
    day = date.getDate(), 
    month = date.getMonth() + 1, 
    elem1 = $('<div />', {id : 'date', text : day}), 
    elem2 = $('<div />', {id : 'month', text : month}); 

$('#dates').append(elem1, elem2); 

FIDDLE

2

这里繁衍时间戳和1000是一个功能我写了这一点,会给你你需要的所有参数甚至更多。

/* 
* This function get all date from timestamp 
*/ 
function dataFromTimestamp(timestamp){ 
    var d = new Date(timestamp); 

    // Time 
    var h = addZero(d.getHours());    //hours 
    var m = addZero(d.getMinutes());   //minutes 
    var s = addZero(d.getSeconds());   //seconds 

    // Date 
    var da = d.getDate();      //day 
    var mon = d.getMonth() + 1;     //month 
    var yr = d.getFullYear();     //year 
    var dw = d.getDay();      //day in week 

    // Readable feilds 
    months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]; 
    var monName = months[d.getMonth()];   //month Name 
    var time = h + ":" + m + ":" + s;   //full time show 
    var thisDay = da + "/" + mon + "/" + yr; //full date show 

    var dateTime = { 
     seconds : s, 
     minutes : m, 
     hours : h, 
     dayInMonth : da, 
     month : mon, 
     year : yr, 
     dayInTheWeek : dw, 
     monthName : monName, 
     fullTime : time, 
     fullDate : thisDay 
    }; 
    return dateTime; 

    function addZero(i) { 
     if (i < 10) { 
      i = "0" + i; 
     } 
     return i; 
    } 
} 

https://jsfiddle.net/mkammdgz/

+1

谢谢@ofir_aghai – qqruza

0
var dt = new Date(); 
    var time = dt.getMonth()+1 +""+ dt.getDate()+ "" +dt.getFullYear() +""+ dt.getHours() +""+ dt.getMinutes() +""+ dt.getSeconds(); 

    console.log(time); 
0

我知道已经晚了,但我面对这个问题,我为它找到一个解决方案。

尝试,而不是使用moment()从时间戳转换为实际日期

要获得完整的日期,使用moment(Timestamp).format('MM/DD/YYYY')

要获取月份名称,使用moment(Timestamp).format('MMMM')

在你的代码的情况下,请尝试以下:

$('#dates').append('<div id="date">' + 
    moment(item.date).format('MM/DD/YYYY') + 
    '</div><div id="month">' + 
    moment(item.date).format('MMMM') + 
    '</div>'); 
相关问题