How can I receive a DateTime from the client exactly what the user choose without changing clock provider.
when the user choose a specific time, the server will receive it as UTC. I need to disable this behavior for a specific property, while keeping everything working as normal. I need to know exactly the selected time by the user.
Current behavior: Startup.cs - ClockProviders.Utc Client - 10:00 +3 Server - 07:00 +0
Trying to do: Startup.cs - ClockProviders.Utc Client - 10:00 +3 Server - 10:00 +3
---------------------------------------------- <span class="colour" style="color: rgb(0, 0, 0);">product version: </span>5.1.0<span class="colour" style="color: rgb(0, 0, 0);"><span class="colour" style="color: rgb(0, 0, 0);"> </span>.net core</span> Angular: 6.1.7 Angular CLI: 6.2.3 Node: 12.13.0 OS: win32 x64
37 Answer(s)
-
0
You take a look and try Disable DateTime Normalization.
https://aspnetboilerplate.com/Pages/Documents/Timing#disable-datetime-normalization
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
I tried it and it didn't work as expected, it kept the same behaviour. after some more investigation, it works only if it on a parameter directly, but it does not work if it was on a DTO property.
is there something i can try to make it work on a DTO property?
` public async void TestDate([DisableDateTimeNormalization]DateTime datetime){} // this works
public class SomeDto { [DisableDateTimeNormalization] public DateTime datetime {get; set;} } public async void TestDate(SomeDto dto){} // this does not work `
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi,
Could you share the class wich contains
TestDatemethod which doesn't work ?Thanks,
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi,
This is what the class looks like, please let me know if there's something specific you need to know.
public class SomeDto { [Required] [DisableDateTimeNormalization] public DateTime DateTime {get; set;} } public abstract class BaseDDDApplicationService : ApplicationService, IApplicationService { } public interface IBookingAppService : IApplicationService { Task TestDate(SomeDto dto); } public class BookingAppService : BaseDDDApplicationService, IBookingAppService { public async Task TestDate(SomeDto dto){ // do stuff } }Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
hi @alwefaq
What is the version of your abp package?
If you are using
service-proxies.tsplease share the ts code of theTestDatemethod in it.Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
abp package version is 5.5
service-proxies.ts
/** * @param body (optional) * @return Success */ testDate(body: SomeDto | null | undefined): Observable<void> { let url_ = this.baseUrl + "/api/services/app/Contract/TestDate"; url_ = url_.replace(/[?&]$/, ""); const content_ = JSON.stringify(body); let options_ : any = { body: content_, observe: "response", responseType: "blob", headers: new HttpHeaders({ "Content-Type": "application/json", }) }; return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_ : any) => { return this.processTestDate(response_); })).pipe(_observableCatch((response_: any) => { if (response_ instanceof HttpResponseBase) { try { return this.processTestDate(<any>response_); } catch (e) { return <Observable<void>><any>_observableThrow(e); } } else return <Observable<void>><any>_observableThrow(response_); })); } protected processTestDate(response: HttpResponseBase): Observable<void> { const status = response.status; const responseBlob = response instanceof HttpResponse ? response.body : (<any>response).error instanceof Blob ? (<any>response).error : undefined; let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}; if (status === 200) { return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => { return _observableOf<void>(<any>null); })); } else if (status !== 200 && status !== 204) { return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => { return throwException("An unexpected server error occurred.", status, _responseText, _headers); })); } return _observableOf<void>(<any>null); } export class SomeDto implements ISomeDto { dateTime!: moment.Moment; constructor(data?: ISomeDto) { if (data) { for (var property in data) { if (data.hasOwnProperty(property)) (<any>this)[property] = (<any>data)[property]; } } } init(data?: any) { if (data) { this.dateTime = data["dateTime"] ? moment(data["dateTime"].toString()) : <any>undefined; } } static fromJS(data: any): SomeDto { data = typeof data === 'object' ? data : {}; let result = new SomeDto(); result.init(data); return result; } toJSON(data?: any) { data = typeof data === 'object' ? data : {}; data["dateTime"] = this.dateTime ? this.dateTime.toISOString() : <any>undefined; return data; } } export interface ISomeDto { dateTime: moment.Moment; }Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image)
-
0
Hi, I have sent an email containing the sample project show the issue.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
OK, I will check it as soon as possible.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
hi @alwefaq
I have downloaded your project, please provide the steps for me to reproduce the problem.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi, 1- Open DateTimeIssueProject.sln 2- Run DateTimeIssueProject.Migrator 3- Run DateTimeIssueProject.Web.Host 4- Run Angular Project 5- go to http://localhost:4200/account/register 6- fill required info and click submit 7- debug Register method in AccountAppService 8- check FirstDateTime and SecondDateTime from RegisterInput dto
** note that the values are provided from register.component.ts and both are set to moment("2014-02-27T10:00:00")
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
hi alwefaq
Can you check if your code uses this change?
https://github.com/aspnetzero/aspnet-zero-core/pull/2573
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi, our code does not use this change.
current angular version: Angular CLI: 6.2.3 Node: 12.13.0 OS: win32 x64 Angular: 6.1.7
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
hi
Can you try to apply the changes in pr, or try using the latest demo project?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi, I got a the latest demo for testing and it worked fine, but for some reason adding the changes to my project didn't fix the issue. please note that the angular version from the demo is Angular CLI: 9.1.0 Node: 12.13.0 OS: win32 x64 Angular: 9.1.0
and for my project is: Angular CLI: 6.2.3 Node: 12.13.0 OS: win32 x64 Angular: 6.1.7
The changes as below:
// AppPreBootstrap private static getUserConfiguration(callback: () => void): any { //... AppPreBootstrap.configureMoment(); //... }
private static configureMoment() { moment.locale(new LocaleMappingService().map('moment', abp.localization.currentLanguage.name)); (window as any).moment.locale(new LocaleMappingService().map('moment', abp.localization.currentLanguage.name)); if (abp.clock.provider.supportsMultipleTimezone) { moment.tz.setDefault(abp.timing.timeZoneInfo.iana.timeZoneId); (window as any).moment.tz.setDefault(abp.timing.timeZoneInfo.iana.timeZoneId); } else { moment.fn.toJSON = function () { return this.locale('en').format(); }; moment.fn.toISOString = function () { return this.locale('en').format(); }; } }
// add LocaleMappingService import { AppConsts } from '@shared/AppConsts'; import * as _ from 'lodash';
export class LocaleMappingService { map(mappingSource: string, locale: string): string { if (!AppConsts.localeMappings && !AppConsts.localeMappings[mappingSource]) { return locale; }
const localeMappings = _.filter(AppConsts.localeMappings[mappingSource], { from: locale }); if (localeMappings && localeMappings.length) { return localeMappings[0]['to']; }
return locale; } }
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
but for some reason adding the changes to my project didn't fix the issue.
Is there any error message?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
No error message, it just does not work.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi @alwefaq
Can you try below statement instead ?
Date.prototype.toISOString = function () { return moment(this).locale('en').format(); };Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi @ismcagdas, This works prefectly, Thanks. Can you please explain why this works if you don't mind?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
I am sorry here , I was mistaken , the last provided solution did not work for me, still I am getting notmalized datetime on the server. Any other suggestion please ?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
1
Hi @alwefaq,
Can you have a look at this ticket, I raised this issue and I think this is exact same issue you are facing. No clear answer to the isuee yet.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
any updates here please?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Reminder please .. please let us know if this is a unkoun issue and has no solution from your side so we can find another way to solve it.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
-1
Hi @alwefaq
I couldn't reproduce your problem. Here is what I did;
- Set
Clock.Provider = ClockProviders.Utc;in PreInitialize of my web module. - Define a datetime field in my Dto like below;
[DisableDateTimeNormalization] public DateTime MyDate {get; set;}- Send a date to server as below;
2020-06-01T10:33:10+03:00Then, I get the correct value on server side.
Could you share the date string you are sending to server ?
Thanks,
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) - Set
-
0
Hi @ismcagdas
a sample project contains the issue already has been sent to you before , you can find it here
https://support.aspnetzero.com/QA/Questions/8963#answer-d97287ad-bfec-df6d-ab05-39f517bc2e47
would you check it again and let me know if it works with you or not.
Thanks
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image)