【问题标题】:Formatting dates in Underscore templates在下划线模板中格式化日期
【发布时间】:2013-09-05 05:32:44
【问题描述】:

我在 下划线模板中使用的 Backbone 模型中有一个 date 属性。
date 值采用整数格式,例如 123456432

我想在下划线模板中以 dd / mm / yyyy 格式显示这个整数值,就像我在 PHP 中所做的那样。

这是我的下划线模板

<script type="text/template" id="item-template">    
    <span class="label label-info"><%- name %> <em> <%= date %> </em>  </span>
</script>

【问题讨论】:

  • 如何将数据传递给模板?只需调用模型的toJSON方法?
  • 是的,我用过toJSON方法..还有其他方法吗?

标签: php javascript date backbone.js underscore.js


【解决方案1】:

下划线模板让您可以通过print 以任何您认为合适的方式调用函数和输出文本。例如,要将您的时间戳转换为日期,您可以使用类似这样的方法

<script type="text/template" id="tpl-1">    
    <span class="label label-info"><% print(new Date(date*1000)) %></span>
</script>

请注意,我假设时间戳来自 PHP,因此以秒为单位。在 Javascript 中,时间戳预计以毫秒为单位,这就是我将其乘以 1000 的原因。

如果您的时间戳来自 Javascript,请使用

<script type="text/template" id="tpl-1">    
    <span class="label label-info"><% print(new Date(date)) %></span>
</script>

Formatting this date object 可以这样做

<script type="text/template" id="tpl-2">    
    <span class="label label-info"><% 
        var d = new Date(date*1000), // or d = new Date(date)
            fragments = [
                d.getDate(),
                d.getMonth() + 1,
                d.getFullYear()
            ]; 
            print(fragments.join('/'));
        %></span>
</script>

或者将所有这些分解成一个函数调用(这里是_.template,但你可以将它存储在任何地方)

_.template.formatdate = function (stamp) {
    var d = new Date(stamp*1000), // or d = new Date(date)
        fragments = [
            d.getDate(),
            d.getMonth() + 1,
            d.getFullYear()
        ]; 
    return fragments.join('/');
};
<script type="text/template" id="tpl-3">    
    <span class="label label-info"><%= _.template.formatdate(date) %></span>
</script>

还有一个演示 http://jsfiddle.net/Dyzm8/

【讨论】:

  • 谢谢兄弟,这对我有很大帮助,但我仍然得到随机时间而不是当前时间......当我第一次创建事件时,我将日期以date = new Date().getTime(),整数格式存储在我的数据库中,然后我使用你的第一种方法进行检索。不幸的是,它每次都会给出错误的时间......
  • 如果日期时间戳来自Javascript,它已经是毫秒,你不应该将它乘以1000。以print(new Date(date))为例
  • 为什么要将逻辑下推到模板中?
  • @Blacksonic 我不认为日期格式是应用程序逻辑,而是每个人自己的逻辑
【解决方案2】:

你有两个选择:

在传递toJSON方法的结果时,用另一个字段扩展对象:

var fields = this.model.toJSON();
fields.formattedDate = '29/11/1973';
this.template(fields);

另一种方法是查看Backbone Marionette,其中helper methods 用于此类情况(并解决了许多其他重复性任务)。

可以在here找到一个简单的 Javascript 中的 PHP 日期函数端口。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 2016-12-09
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多