Javascript Angularjs,日期采集者有一天会回来

Javascript Angularjs,日期采集者有一天会回来,javascript,angularjs,date,datepicker,Javascript,Angularjs,Date,Datepicker,我知道datepicker(我正在使用)是“落后于”一天的,因为日期是用javascript计算的。我的问题是,我如何让它不考虑时区,只是坚持输入的日期。。。没有调整 我在日期选择器中选择2014年2月1日。我在屏幕上的值是2/1/2014,我希望保存该值。然而,日期选择器将其转换为2014年1月31日星期五19:00:00 GMT-0500(EST),显然是因为它从输入的日期中减去了我所在时区的5小时。我不要这个。如果我输入2014年2月1日,我希望该日期,无论时区如何 截取/更改/编辑此值的

我知道datepicker(我正在使用)是“落后于”一天的,因为日期是用javascript计算的。我的问题是,我如何让它不考虑时区,只是坚持输入的日期。。。没有调整

我在日期选择器中选择2014年2月1日。我在屏幕上的值是2/1/2014,我希望保存该值。然而,日期选择器将其转换为2014年1月31日星期五19:00:00 GMT-0500(EST),显然是因为它从输入的日期中减去了我所在时区的5小时。我不要这个。如果我输入2014年2月1日,我希望该日期,无论时区如何


截取/更改/编辑此值的最佳方式是什么,以便输入2014年2月1日,我可以准确地看到该日期。。。没有时区转换?我是否应该修改datepicker代码本身(这似乎是个坏主意)?我是否应该在发送到后端之前通过添加某种偏移量来更改该值?如果是这样,您如何为控制台显示为2014年1月31日星期五19:00:00 GMT-0500(美国东部时间)的值添加时间?

如果您不介意加载另一个资源,那么我建议使用MomentJS,因为它可以消除JavaScript中过时的痛苦。您可以执行类似“矩(日期选择器值).local()”的操作来获取不带时区偏移的日期


我用自定义指令解决了这个问题

它适用于AngularStrap日期选择器,但我想它也适用于AngularStrap日期选择器,因为它只依赖于相应的ngModel,而不是日期选择器本身

本质上,每当在datepicker上选择一个日期时(该值是一个yyyy-mm-dd格式的字符串,将存储在模型上),每当访问模型以填充视图时,我都要重新格式化该值,以便datepicker能够正确地处理它


换句话说,它正是在做你在问题中要求的截取。

我知道这个帖子有点老了,但由于没有公认的解决方案,我想我会提供一些经过大量混乱后最终对我有用的东西:

在我的例子中,问题是datepicker使用了错误的时区,因此当我试图编辑事件时,即使正确的日期存储在db中,也会显示错误的日期。以下内容为我修复了它:

 var evDate = new Date(data.eventDate); //data.eventDate is the date string
 evDate.setMinutes(evDate.getMinutes() + evDate.getTimezoneOffset()); 

 $scope.eventInfo.eventDate = evDate;

我在这里找到了这个解决方案:

我找到了一种方法。首先将该日期转换为字符串。这是代码

 var SelectDate = $scope.GetFormattedDate(Date.parse($("#Date").datepicker("getDate")));            
     $scope.GetFormattedDate = function (CalDate) {
            var re = /-?\d+/;
            var WDate = CalDate.toString();
            var m = re.exec(WDate);
            var lastDate = new Date(parseInt(m[0]));
            var mm = lastDate.getMonth() + 1;
            var dd = lastDate.getDate();
            var yyyy = lastDate.getFullYear();
            var formattedDate = mm + '/' + dd + '/' + yyyy;

            return formattedDate;
        }

现在将SelectDate传递给控制器。宾果游戏问题已经解决:)

伙计们,如果你们遇到这个问题,可能是因为你们在反应,把数据放进boostrap数据采集器。这个解决方案对我很有效。 首先检查日期是否为空

dateBegin===null?dateBegin=null:dateBegin = new Date(formatDate(dateBegin,'yyyy-MM-dd','en'));
**如果为null,则将其值设置为null,并将其放入表单组和表单组控件中

this.ugovorForm = new FormGroup({'dateBegin':new FormControl(dateBegin)})

否则,您将使用Angular提供的formatDate属性设置日期并对其进行格式化。我一直在思考这个问题。这是因为我正在从数据库加载日期。祝您好运

这不起作用,因为我已经只向日期选择器提供了月份、日期和年份的值。我不提供时区,它会自动执行此操作,这就是问题所在。例如,日期选择器看到2/1/14,它将其转换为2014年2月1日00:00:00,然后从中减去我的时区,即2014年1月28日19:00:00。从momentJS传递值并不能解决此问题。日期选择器的模型返回的值与您输入的值不同,因此为什么不在发送到后端之前使用momentJS调整该值?能否在上下文中显示该要点?我也有同样的问题,但你的指令对我不起作用。