【问题标题】:Formatting an RSS Feed Date and Time格式化 RSS 源日期和时间
【发布时间】:2013-12-05 22:55:23
【问题描述】:

我有一个 RSS 提要,我使用 FeedRoll 创建它,并通过 xslt 将其拉入我的网站。我的问题是我必须通过 javascript 创建什么格式来格式化我的日期,使其看起来不像:

2013 年 12 月 4 日上午 05:00:00

而是看起来像:

2013 年 12 月 4 日下午 5:00

FeedRoll 提供的脚本是:

<script language="JavaScript" src="http://www.feedroll.com/rssviewer/feed2js.php?
src=http%3A%2F%2Frss.cnn.com%2Frss%2Fcnn_topstories.rss&num=5&date=y&tz=+n/-
n/'feed'&utf=y"  charset="UTF-8" type="text/javascript"></script>

显示如下:

看起来这个特定的提要是由 php 驱动的,并且偏移量设置为:+n/-n/'feed' 但这对我来说没有任何意义。 我如何让月份缩短并像我在上面寻找的那样对齐零?

我假设 Javascript 是最简单的方法......从逻辑上讲,我被卡住了。

****更新****(这是我的样式表的外观):

  <xsl:template name="news_feed">
     <script language="JavaScript" src="{RSSSrc}"  charset="UTF-8"
                type="text/javascript"></script>
  </xsl:template>

  <xsl:template match="NewsPage">
    <div class="news-block">
        <div class="holder">
            Image goes here...
            <div class="section">
                <dl>
                    <xsl:call-template name="news_feed"/>
                </dl>
                </div>
           </div>
    </div>
  </xsl:template>

【问题讨论】:

  • 我认为最好在上游进行。你能发布你的 XSLT 样式表吗?
  • @user3016153 我刚刚更新了我的问题。
  • 嗯,钱在“news_feed”模板中,没有显示。恕我直言,要自定义 FeedRoll 提供的功能之外的内容,您不妨直接访问 RSS 源。将 Atom 提要转换为 HTML 非常容易,然后您可以应用自己的 CSS 样式。 OTOH,我看到原始 CNN 提要提供的时间戳为 Tue, 03 Dec 2013 20:59:45 EST。如果您需要更改时区和/或转换为 12 小时格式,您可能希望通过 Javascript 来完成。
  • @user3016153 为什么不显示?这是第一个模板...由一个 javascript 行组成。
  • @nl-x 我的意思是我们看不到它做了什么。为此,我们需要查看它指向的 javascript。

标签: javascript php xslt rss


【解决方案1】:

我很快可以谷歌的是,Feedroll 只提供这种格式的日期。 (可以选择设置自定义时区)

如果你真的反对,你所能做的就是设置一个 onload 函数来获取所有类 rss-date 的元素,然后将 innerText 解析为一个 Date 对象。然后再次输出为您选择的日期格式。

编辑:这里是一个带有 jquery 的 javascript 实现。

最困难的部分甚至不是选择和解析。但实际上只是将字符串格式化为您想要的。如果您不喜欢使用它,您甚至可以通过少量工作去除所有 jquery。

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type='text/javascript'>
function myFormat(dateTime) {
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
    var dateString = months[dateTime.getMonth()] + ' ' + dateTime.getDate() + ', ' + dateTime.getFullYear();
    var timeString;
    if (dateTime.getHours() == 0)
        timeString = "12:" + (dateTime.getMinutes()<10?"0"+dateTime.getMinutes():dateTime.getMinutes()) + "AM";
    else if (dateTime.getHours() < 12)
        timeString = dateTime.getHours() + ":" + (dateTime.getMinutes()<10?"0"+dateTime.getMinutes():dateTime.getMinutes()) + "AM";
    else if (dateTime.getHours() == 12)
        timeString = "12:" + (dateTime.getMinutes()<10?"0"+dateTime.getMinutes():dateTime.getMinutes()) + "PM";
    else
        timeString = (dateTime.getHours()-12) + ":" + (dateTime.getMinutes()<10?"0"+dateTime.getMinutes():dateTime.getMinutes()) + "PM";
    return dateString + ' ' + timeString;
}
$(document).ready(function() {$('.rss-date').each(function() {$(this).text(myFormat(new Date($(this).text())));});});
</script>

【讨论】:

  • 是的,这是我自己想出来的……feed roll 只允许您拉时区或简单格式。我正在尝试覆盖这种格式...将 innerText 解析为日期对象听起来像是矫枉过正...这可能是覆盖这种格式的唯一方法吗?如果是这样,这将如何写? @nl-x
  • 非常非常接近...由于某种原因,时间偏移显示为-7:0PM...@nl-x
  • 是的,我知道。在我第二次编辑之前,你可能已经拿走了代码。立即尝试
  • 哦,但是等等...现在 PM 正在显示为 AM...我确定我可以解决这个问题。刚看了。
  • 一个要添加的...是否有任何方法可以删除“下午 5:00”并改为显示为“下午 5 点”? @nl-x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 2020-06-27
  • 2018-05-20
  • 1970-01-01
  • 2017-09-14
相关资源
最近更新 更多