如何在jQuery中将日期格式从完整格式转换为YYYYMMDD格式?

3

我正在使用AJAX从XML文件中获取数据,并将其打印出来。其中之一是日期,使用以下代码:

jQuery(function(){
        $.ajax({
          url: 'http://www.sagittarius-digital.com/news.rss',
          dataType: 'xml'
        }).done(function(xml){
          var items = $(xml).find('item').map(function(){
                var $item = $(this);
                var array = '<div class="item">';
array += '<p>' + $item.find('pubDate').text() + '</p>';
  return array;

所以这行代码是:

 array += '<p>' + $item.find('pubDate').text() + '</p>';

返回的日期格式如下:

Mon, 18 Nov 2013 12:00:00 GMT

我应该如何将其转换成YYYMMDD格式?不需要时间。 实际操作中的示例(大量错误,加载需要一段时间)

也许这个答案可以帮到你:https://dev59.com/F3bZa4cB1Zd3GeqPEldw - Streamside
你应该看一下 moment.js,它是一个帮助你操作和格式化时间的库。 - Antoine
4个回答

9

这看起来是一个有效的日期,因此使用 new Date() 进行解析。

var date = new Date('Mon, 18 Nov 2013 12:00:00 GMT');

FIDDLE

在你的代码中,类似于:

ajax.done(function(xml){
      var items    = $(xml).find('item').map(function(){
      var $item    = $(this);
      var array    = '<div class="item">';
      var date     = new Date( $item.find('pubDate').text() );

      var year  = pad(date.getFullYear());
      var month = pad(date.getMonth() + 1);
      var day   = pad(date.getDate());

      var yyyymmdd = year + month + day;

      array += '<p>' + yyyymmdd + '</p>';

      return array;
  });

function pad(numb) {
    return (numb < 10 ? '0' : '') + numb;
}

date.getMonth()+1 是因为一月是0。 - Somnath Kharat
这如何与我上面发布的代码配合?我很新手。我需要获取从以下语句中获取的数据:array += '<p>' + $item.find('pubDate').text() + '</p>'; - Francesca
这不是零填充的。2014113代表11月3日还是1月13日? - Robert Penridge

4
var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when I wrote this comment

为了解释,.slice(-2) 给我们字符串的最后两个字符。
所以无论如何,我们可以将 "0" 添加到天或月份,并且仅要求最后两个字符,因为这些始终是我们想要的两个字符。
因此,如果 MyDate.getMonth() 返回 9,则为:
("0" + "9") // Giving us "09"

所以在这个上面添加.slice(-2) 就可以得到最后两个字符,即:
("0" + "9").slice(-2)

"09"

但是如果 date.getMonth() 返回 10,它将会是:
("0" + "10") // Giving us "010"

因此,添加.slice(-2)将给我们最后两个字符:

("0" + "10").slice(-2)

"10"

0
你可以使用日期对象进行处理,并根据需要获取格式。
var yourdate = $item.find('pubDate').text();
// Above gives you date in String form. But for getting date, 
   first create in date object like below
var dt = new Date(yourdate);
var newDt = dt.getFullYear()+""+(dt.getMonth()+1)+""+dt.getDate();
// Output : 20131118
array += '<p>' + newDt + '</p>';

由于 getMonth() 返回的是月份 (0-11),因此需要加 1。

更多细节请查看:http://www.w3schools.com/jsref/jsref_obj_date.asp


这怎么适用于上面的代码?抱歉,我对这一切都很陌生。我该如何获取上面的pubDate数据并将其输出到您在其中有“Mon,18”等的""中? - Francesca
@Francesca:已更新答案。请查看更多细节。 - Nishu Tayal
1
在我看来,它省略了一月至九月和1-9日之前的前导零。例如,今天它会给出201599而不是20150909。 - Leonard

0

使用DateJs进行转换应该很简单:

<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
    var d1 = Date.parse('Mon, 18 Nov 2013 12:00:00 GMT');
    alert(d1.toString('dd/mm/yyyy HH:mm:ss'));
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接