Skip to main content

So this is probably a dumb question, but I have hit a wall! How do you write into a Date/Time field with the current date in the locale timezone? I have tried the .toLocaleString() method and the console will output everything perfectly, but nothing shows up in the field.



This is what I have.



var rightNow = new Date();

var res = rightNow.toLocaleString();

table.updateRecordAsync(record,{

"Date/Time Submitted To Shipping": res

})



Any help would be greatly appreciated!



Update:



I can get the Date/Time in a Date/Time field by using the .toISOString() method, but the time is 5 hours off.

There’s no need to convert the date. Just put it directly into the date field.



A couple other tips:





  • Use let instead of var



  • Add “await” before the update so that the update fully completes before the next part of your code, or else you might get unpredictable results.




let rightNow = new Date();

await table.updateRecordAsync(record,{

"Date/Time Submitted To Shipping": rightNow

});



You could also create the date on the fly:



await table.updateRecordAsync(record,{

"Date/Time Submitted To Shipping": new Date()

});



I used the latter option in a test just now, and it worked fine.


Thanks! That definitely simplifies things, but it still returns the ISO standard date/time, not the local date/time. How do I get the current local date/time?



I tried to reconstruct the ISO date/time using the getTimeZoneOffset() method as follows.



Date.prototype.toISOString = function() {

var tzo = -this.getTimezoneOffset(),

dif = tzo >= 0 ? '+' : '-',

pad = function(num) {

var norm = Math.floor(Math.abs(num));

return (norm < 10 ? '0' : '') + norm;

};

return this.getFullYear() +

'-' + pad(this.getMonth() + 1) +

'-' + pad(this.getDate()) +

'T' + pad(this.getHours()) +

':' + pad(this.getMinutes()) +

':' + pad(this.getSeconds()) +

dif + pad(tzo / 60) +

':' + pad(tzo % 60);

}



var dt = new Date();

console.log(dt.toISOString().slice(0,19));



await table.updateRecordAsync(record,{

"Date/Time Submitted To Shipping":dt.toISOString().slice(0,19)

});



Believe it or not the console logs the correct local time in the ISO format, but the date/time field in the table has the GMT time??


Thanks! That definitely simplifies things, but it still returns the ISO standard date/time, not the local date/time. How do I get the current local date/time?



I tried to reconstruct the ISO date/time using the getTimeZoneOffset() method as follows.



Date.prototype.toISOString = function() {

var tzo = -this.getTimezoneOffset(),

dif = tzo >= 0 ? '+' : '-',

pad = function(num) {

var norm = Math.floor(Math.abs(num));

return (norm < 10 ? '0' : '') + norm;

};

return this.getFullYear() +

'-' + pad(this.getMonth() + 1) +

'-' + pad(this.getDate()) +

'T' + pad(this.getHours()) +

':' + pad(this.getMinutes()) +

':' + pad(this.getSeconds()) +

dif + pad(tzo / 60) +

':' + pad(tzo % 60);

}



var dt = new Date();

console.log(dt.toISOString().slice(0,19));



await table.updateRecordAsync(record,{

"Date/Time Submitted To Shipping":dt.toISOString().slice(0,19)

});



Believe it or not the console logs the correct local time in the ISO format, but the date/time field in the table has the GMT time??




My wife just asked “Is it a setting or something?” Keep in my mind she thinks Airtable is something you eat on in the sky. Guess what? I had the GMT setting off in the field settings!!



Problem solved!



Thanks for the help Justin!!


Reply