将日期转换为日期对象,显示NaN代替日期的角度?

时间:2016-01-14 05:28:09

标签: javascript angularjs date datetime

我有来自服务器的日期格式,显示如下日期和时间:“2016年1月7日星期四11:00:40 GMT + 0530(IST)”,我已将该日期转换为此格式“1/7 / 2016上午11:00“。我面临的问题是我希望以mm / dd / yyyy格式给我一个日期以及上午和下午12小时格式的时间,它只在Chrome浏览器中以这种格式显示我的日期。但当我尝试在i pad中创建项目的构建时,它会显示“Nan”代替日期和时间。

请帮助。

这是我的日期代码:

此功能将我的日期转换为dd / mm / yyyy格式和12小时格式时间。

  function formatDate(date) {
                var hours = date.getHours();
                var minutes = date.getMinutes();
                var ampm = hours >= 12 ? 'pm' : 'am';
                hours = hours % 12;
                hours = hours ? hours : 12; // the hour '0' should be '12'
                minutes = minutes < 10 ? '0'+minutes : minutes;
                var strTime = hours + ':' + minutes + ' ' + ampm;
                return date.getMonth()+1 + "/" + date.getDate() + "/" + date.getFullYear() + " " + strTime;
                }

此代码从json中提取日期并将其转换为指定的格式。

                           var date = new Date(data.Steps.records[i].CreatedDate);

                            //console.log("my date" + typeof(data.Steps.records[i].CreatedDate));
                            var convertedDate = formatDate(date);
                            console.log("my new date " + convertedDate);
                            data.Steps.records[i].CreatedDate = convertedDate;
                            // console.log("format" + data.Steps.records[i].CreatedDate);
                            console.log("date is :" + date);

1 个答案:

答案 0 :(得分:0)

如果data.Steps.records[i].CreatedDate的值类似于&#34; 2016年1月7日星期四11:00:40 GMT + 0530(IST)&#34;那么你试图使用Date构造函数解析一个字符串。这不是一个好主意,因为解析这些字符串在很大程度上依赖于实现,因此即使它在一个主机中工作,它也可能在另一个主机中不起作用。

您应该使用自己的函数或库手动解析字符串。

一旦您正确创建了日期,您就可以创建一个格式化的字符串,并指出它将基于主机的系统设置(即&#34; lolcal&#34; date)。

下面是一个解析OP格式的函数,但是如果你有很多不同格式的字符串,那么库可能会让生活更轻松(虽然更通用的解析器并不难写):

&#13;
&#13;
var s = "Thu Jan 07 2016 11:00:40 GMT+0530 (IST)"
var t = "Thu Jan 07 2016 01:10:50 GMT+0530 (IST)"
var u = "Thu Jan 07 2016 01:40:10 GMT+0530 (IST)"

function parseDate(s) {

  // Map month names to numbers suitable for input to Date
  var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};

  // Get values from the string, split on space and colon
  var b = s.split(/[ :]/);

  // Get the offset value
  var offset = b[7].replace(/\D/g, '');

  // Get the offset sign
  var offSign = b[7].indexOf('+') == -1? 1 : -1;
  
  // Create a new Date and adjust the values by the offset
  return new Date(
    Date.UTC(b[3],                          // Use year directly
    months[b[1].toLowerCase().substr(0,3)], // Get month number from map
    b[2],                                   // Use day number directly
    +b[4] + (offset.substr(0,2)*offSign),   // Adjust hours for offset
    +b[5] + (offset.substr(2,2)*offSign),   // Adjust minutes for offset
    b[6]));                                 // Use seconds directly
}

// Format date as dd/mm/yyy hh:mm:ss a/p
function formatDate(d) {
  function z(n){return ('0'+n).slice(-2)}
  var hr = d.getHours();
  var ap = hr < 12? 'am' : 'pm';
  hr = hr%12 || 12;
  return z(d.getDate()) + '/' + z(d.getMonth()+1) + '/' + d.getFullYear() +
         ' ' + z(hr) + ':' + z(d.getMinutes()) + ':' + z(d.getSeconds()) + ' ' + ap;
}

document.write(formatDate(parseDate(s)) + '<br>' +
               formatDate(parseDate(t)) + '<br>' +
               formatDate(parseDate(u)));
&#13;
&#13;
&#13;

修改

添加函数以格式化每个OP的日期字符串。