【问题标题】:add future date to a date gotten from json response将未来日期添加到从 json 响应中获得的日期
【发布时间】:2019-08-20 15:26:54
【问题描述】:

我从 json 响应中得到了一个日期。我能够过滤日期以确认它是实际日期类型,但我无法为其设置未来日期。下面是我的sn-p

$rootScope.until= response.data.data.dateReceived;

//return future date
// var targetDate = new Date();
$rootScope.until.setDate($rootScope.until + 60);//adding 60 days but cannot


// So you can see the date we have created
$rootScope.until = $filter("date") ($rootScope.until), 'EEEE, MMMM d, y');

请问如何添加未来日期

【问题讨论】:

  • 您从 JSON 数据中获得的日期——它是什么格式?毫秒? ISO-8601 时间戳?
  • 这是日期 >>> 40508623308 以毫秒为单位
  • 这应该是 1971 年的日期吗?如果没有,我不知道你使用的是什么格式。了解输入数据的形式对于解决任何问题都至关重要。
  • 是的,它是 1971 年的毫秒格式

标签: javascript json angularjs


【解决方案1】:

这里似乎有两个不同的错误。

  1. 您正在尝试在 Number 上使用 Date 函数。
  2. 函数Date#setDate()日期作为其参数 月,而不是时间戳本身。

日期与数字

问题

如果您使用new Date(response.data.data.dateReceived) 将收到的毫秒数转换为Date 数据类型,您将能够访问setDate() 之类的方法。

但是,使用您当前的代码,您正试图对 JavaScript 中的一个普通数字执行 setDate()。它也可能是-1,因为 JavaScript 不知道你的数字意味着什么,而不是它的数值。

解决方案

由于您的输入数据以毫秒为单位(您在 cmets 中指出了这一点),因此完成此操作的最简单方法是将毫秒添加到您的初始时间戳,如下所示:

const SIXTY_DAYS = 5184e6; //1000ms/sec * 3600secs/hour * 24hours/day * 60days
$rootScope.until= response.data.data.dateReceived + SIXTY_DAYS;

只要确保该值是一个数字,而不是一个字符串,否则这将执行连接而不是加法。


setDate 参数

问题

如果您确实有一个数据类型为Date(见上文)的变量,那么您可以访问Date.setDate()之类的方法。但是,此方法的参数与您的代码假定的参数有些不同。

解决方案

setDate() 将自月初以来的数作为其参数。如果要添加天数,可以执行以下操作:

$rootScope.until= new Date(response.data.data.dateReceived);
$rootScope.until.setDate($rootScope.until.getDate() + 60);

此代码将获取日期的月份中的某天,然后将该值加上 60 天。它会自动处理当月的变化。

【讨论】:

  • @Float 你应该可以像这样使用 AngularJS 日期过滤器:$filter('date')($rootScope.until, 'EEEE, MMMM d, y');
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多