AngularJS变量传入HAML后如何去除日期字符串中的UTC后缀?
解决AngularJS传入HAML的日期移除UTC后缀的问题
嘿,我来帮你搞定这个日期字符串处理的问题!针对你提到的从AngularJS传入HAML的日期格式(比如2018-05-07 08:48:35 UTC),这里有几个实用的实现方法,你可以根据自己的场景选择:
方法1:使用AngularJS自定义过滤器(推荐)
这是最符合AngularJS最佳实践的方式,把视图层的数据格式化逻辑封装成过滤器,复用性强:
首先在你的AngularJS模块里定义一个过滤器:
// 假设你的模块名为app angular.module('app').filter('stripUTC', function() { return function(dateString) { // 先判断输入是否有效,避免报错 if (!angular.isString(dateString)) return dateString || ''; // 用正则替换掉末尾的" UTC"(注意前面的空格) return dateString.replace(/\sUTC$/, ''); // 也可以用split方法实现:return dateString.split(' UTC')[0]; }; });
然后在你的HAML代码里直接使用这个过滤器:
.directive-report-images{ ng_show: 'conditionIsChecked && fragment._parentConditionChecked' } .row .col-md-4 .title %h5.black {{ fragment.title }} <!-- 这里使用过滤器处理日期变量 --> %span {{ fragment.yourDateVariable | stripUTC }} .col-md-8 %report_fragment_visibility .row{ ng_if: 'fragment.media().length <= 2' } .col-md-6.thumbnail{ ng... }
方法2:直接在HAML的Angular表达式中处理(快速简单)
如果只是临时用一次,不想写过滤器,可以直接在视图表达式里处理:
<!-- 用split方法截取 --> %span {{ fragment.yourDateVariable.split(' UTC')[0] }} <!-- 或者用正则替换 --> %span {{ fragment.yourDateVariable.replace(/\sUTC$/, '') }}
方法3:在控制器中预处理日期(高效)
如果这个日期在多个地方使用,或者你希望视图层更简洁,可以在控制器里提前处理好:
// 在你的控制器中 angular.module('app').controller('YourController', function($scope) { // 假设原始日期变量是fragment.date $scope.processedDate = $scope.fragment.date ? $scope.fragment.date.replace(/\sUTC$/, '') : ''; });
然后在HAML里直接使用处理后的变量:
%span {{ processedDate }}
额外提示:如果是Date对象而非字符串
如果你的日期其实是JavaScript的Date对象(不是字符串),那更推荐用AngularJS内置的date过滤器来格式化,这样更稳妥:
%span {{ fragment.yourDateObject | date:'yyyy-MM-dd HH:mm:ss' }}
内容的提问来源于stack exchange,提问作者user9569059
相关产品推荐
相关产品推荐

