我需要创建一个方法,将日期呈现给创建日期一年后的表。我已经尝试过标题中列出的那一行,但是没有用。我现在有一张桌子,旁边列出了“加入日期”,我希望它说“日期已过期”。从加入之日起一年。
示例:
public async static Task<MyAppDataModels.Common.WsResponse> PostPhotoFromUser(int catalogItemId, int objReferenceId, int languageId, byte[] fileContent)
{
MyAppDataModels.Common.WsResponse MyResponse = new MyAppDataModels.Common.WsResponse();
try
{
HttpClient MyHttpClient = new HttpClient();
MyHttpClient.Timeout = TimeSpan.FromSeconds(520);
MyHttpClient.BaseAddress = new Uri(string.Format("{0}/Application/ApplicationPostPhotoFromUser", MyAppSettings.ServerApiUrl));
MyHttpClient.DefaultRequestHeaders.Accept.Clear();
MyHttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
MyHttpClient.DefaultRequestHeaders.AcceptCharset.Clear();
MyHttpClient.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8"));
HttpRequestMessage MyWsRequest = new HttpRequestMessage(HttpMethod.Post, MyHttpClient.BaseAddress);
dynamic MyObjData = new JObject();
MyObjData["CatalogItemId"] = catalogItemId;
MyObjData["ObjReferenceId"] = objReferenceId;
MyObjData["UserId"] = string.Empty;
MyObjData["LanguageId"] = languageId;
MyObjData["Picture"] = fileContent;
string MySerializedPostedData = JsonConvert.SerializeObject(MyObjData);
MyWsRequest.Content = new StringContent(MySerializedPostedData, Encoding.UTF8, "application/json");
HttpResponseMessage MyWsResponse = await MyHttpClient.SendAsync(MyWsRequest, HttpCompletionOption.ResponseHeadersRead);
MyWsResponse.EnsureSuccessStatusCode();
var MyContentResponse = await MyWsResponse.Content.ReadAsStringAsync();
MyResponse.ResponseId = MyAppConstants.Constants.ResponseCode.Successfull;
}
catch (Exception ex)
{
MyResponse.ResponseId = MyAppConstants.Constants.ResponseCode.ErrorWhileProcessingRequest;
MyResponse.ResponseErrorMessage = ex.Message;
}
return MyResponse;
}
我应该如何格式化expiration_date方法。 date_joined工作正常。
答案 0 :(得分:3)
您应该将1.year
添加到created_at
时间对象:
def expiration_date
created_at + 1.year
end
格式化:
def expiration_date
(created_at + 1.year).strftime("%-m/%-d/%-y")
end
rails console:
=> some_object.created_at
=> Wed, 12 Apr 2016 17:37:12 UTC +00:00
=> some_object.created_at + 1.year
=> Wed, 12 Apr 2017 17:37:12 UTC +00:00
=> (some_object.created_at + 1.year).strftime("%-m/%-d/%-y")
=> "4/12/17"
答案 1 :(得分:0)
我觉得你实际上在这里问错了问题。你不是在Rails中做这个功能,而是在问一个Ruby问题,“我如何使用Ruby日期时间对象之间的交互。”我建议您使用Ruby / Rails datetime对象,看看它们是如何工作的。
那就是说,我很确定别人会发布你想要的答案。
答案 2 :(得分:0)
请记住,在保存模型之前,不会填充created_at
,直到那时您的计算才会起作用。这可能是个问题。
您所拥有的date_joined
方法不应该存在。任何格式问题都应该是您的视图的责任,因此请将此逻辑推送到那里:
<%= model.created_at.strftime("%-m/%-d/%-y") %>
您甚至可以使用区域设置demonstrated in this question来定义日期格式,您可以将其添加到config/locales/en.yml
:
en:
date:
formats:
default: "%-m/%-d/%-y"
time:
formats:
default: "%-m/%-d/%-y %H:%M"
然后您可以在视图中将其用作默认值,无需任何特殊处理:
<%= model.created_at %>
这将按照您想要的方式进行格式化,而不是您不得不为每个模型定义特殊的格式化程序方法,然后记住调用它们。
在未来计算日期时,你可以在日期做数学:
def expiration_date
(self.created_at || DateTime.now) + 1.year
end
即使模型尚未保存,也能正常工作。