I have a public community which means that guest users will be sharing the same guest user record (But not all users will be guest). I am trying to create a way to for them to enter a dateTime and send it back to the server. It looks like ui:inputDateTime automatically converts the selected dateTime using the timezone on the user record.
Example 1:
User Time Zone (on Salesforce user record) = GMT
<ui:inputDateTime>
: user enters January 26 12:00 PMvalue =2017-01-26T12:00:00.000Z
Example 2:
- User Time Zone (on Salesforce user record) = EST
<ui:inputDateTime>
user enters January 26 12:00 PM- value = 2017-01-26T17:00:00.000Z
As guest users will be sharing the same record , I am trying to use moment.js to convert the time to utc using the utc-offset of the browser.
var dateTime=component.find("UIdateTimeCmp").get("v.value");
var convertedNewTime = moment(dateTime).utc().format('YYYY-MM-DD HH:mm:ss');
This worked when I tried using lightning:input type="Datetime-local"
but then I discovered IE and firefox don't support it so I am switching to ui:inputDateTime.
The "z" makes moment think that the time is already in GMT so there is no conversion. A workaround for this I came up with is that If I know the user is a guest user and I know that the guest user record has a GMT timezone, I found that I could slice the z before converting.
var dateTime=component.find("UIdateTimeCmp").get("v.value");
dateTime= dateTime.slice(0,-1);
var convertedNewTime = moment(dateTime).utc().format('YYYY-MM-DD HH:mm:ss');
But then this messes things up for users who are not guest users and do not have the GMT timezone on their record.
//salesforce timezone = EST
//User enters 12:00 PM. (Utc time should be 17:00:00)
var dateTime=component.find("UIdateTimeCmp").get("v.value"); //2017-01-26T17:00:00.000Z
dateTime= dateTime.slice(0,-1);
var convertedNewTime = moment(dateTime).utc().format('YYYY-MM-DD HH:mm:ss'); // 2017-01-26T22:00:00
I need a way to get the actual value the user sees in the datepicker rather than the value converted to the user record's timezone, so that I can use moment.js to convert the value to the browser's utc-offset.
isGuest
as a aura:attribute and skip the timezone conversion logic if its value isfalse