AngularJS中将日期格式化为2018-01-03T09:30:00的实现方法
嘿,我来帮你搞定这个日期格式转换的需求!你需要把带毫秒的ISO日期(比如2018-01-03T09:30:54.264Z)转换成去掉毫秒且秒数归零的格式(2018-01-03T09:30:00),同时适配AngularJS的datetime-local输入控件,这里有两种实用的方法:
方法一:在Controller中直接处理日期对象
最简单的方式就是在生成/获取日期后,手动将秒数和毫秒数清零,这样AngularJS会自动把处理后的Date对象适配成datetime-local所需的格式:
// 生成当前日期并处理 var myDate = new Date(); // 清零秒和毫秒,得到整分的时间 myDate.setSeconds(0); myDate.setMilliseconds(0); $scope.form.date.push(myDate); // 如果是处理已有的带毫秒的日期字符串 var originalDateStr = "2018-01-03T09:30:54.264Z"; var myDate = new Date(originalDateStr); myDate.setSeconds(0); myDate.setMilliseconds(0); $scope.form.date.push(myDate);
这样处理后,绑定到ng-model的Date对象会被datetime-local控件正确识别,显示为你想要的YYYY-MM-DDTHH:mm:00格式。
方法二:自定义过滤器(复用性更强)
如果你的项目中多处需要这种日期处理,推荐创建一个AngularJS过滤器,方便在Controller或模板中复用:
首先在你的模块中定义过滤器:
angular.module('yourAppName').filter('truncateToMinute', function() { return function(inputDate) { // 先把输入转为Date对象(兼容字符串输入) if (!(inputDate instanceof Date)) { inputDate = new Date(inputDate); } // 清零秒和毫秒,返回处理后的日期 var processedDate = new Date(inputDate); processedDate.setSeconds(0); processedDate.setMilliseconds(0); return processedDate; }; });
然后在Controller中注入$filter服务并使用:
app.controller('yourController', ['$scope', '$filter', function($scope, $filter) { var myDate = new Date(); // 用过滤器处理日期后再存入数组 $scope.form.date.push($filter('truncateToMinute')(myDate)); }]);
如果需要在模板中直接显示格式化后的日期,也可以这样用:
{{ form.date[$index] | truncateToMinute | date:'yyyy-MM-ddTHH:mm:ss' }}
关键说明
datetime-local输入控件要求的绑定值格式是YYYY-MM-DDTHH:mm:ss(不带毫秒和时区),通过清零秒和毫秒的方式处理Date对象,比手动拼接字符串更可靠,还能避免时区转换带来的问题。
内容的提问来源于stack exchange,提问作者Mateusz Kibiłko
相关产品推荐
相关产品推荐

