@@ -1875,6 +1875,7 @@ function RecordTable(vm) {
18751875 let dateFormat = localStorage . getItem ( "dateFormat" ) ;
18761876 let datetimeFormat = localStorage . getItem ( "datetimeFormat" ) ;
18771877 let decimalFormat = localStorage . getItem ( "decimalFormat" ) ;
1878+ let convertToLocalTime = localStorage . getItem ( "convertToLocalTime" ) != "false" ;
18781879 if ( decimalFormat != "." && decimalFormat != "," ) {
18791880 decimalFormat = "." ;
18801881 localStorage . setItem ( "decimalFormat" , decimalFormat ) ;
@@ -2005,6 +2006,8 @@ function RecordTable(vm) {
20052006 row [ c ] = convertDate ( record [ field ] , dateFormat ) ;
20062007 } else if ( columnType . get ( field ) == "datetime" && datetimeFormat ) {
20072008 row [ c ] = convertDate ( record [ field ] , datetimeFormat ) ;
2009+ } else if ( columnType . get ( field ) == "datetime" && convertToLocalTime ) {
2010+ row [ c ] = convertDtToLocalTime ( record [ field ] ) ;
20082011 } else if ( ( columnType . get ( field ) == "decimal" || columnType . get ( field ) == "currency" ) && decimalFormat && decimalFormat != "." ) {
20092012 row [ c ] = record [ field ] ? record [ field ] . toString ( ) . replace ( "." , decimalFormat ) : record [ field ] ;
20102013 } else {
@@ -2015,11 +2018,29 @@ function RecordTable(vm) {
20152018 }
20162019 }
20172020 }
2021+ function convertDtToLocalTime ( field ) {
2022+ let dt = new Date ( field ) ;
2023+ let tzOffset = dt . getTimezoneOffset ( ) ; // returns the difference in minutes.
2024+ dt . setMinutes ( dt . getMinutes ( ) - tzOffset ) ;
2025+ let finalDate = dt . toISOString ( ) . replace ( "Z" , "" ) ;
2026+ finalDate += ( tzOffset > 0 ? "-" : "+" ) ;
2027+ tzOffset = Math . abs ( tzOffset ) ;
2028+ let offsetHours = Math . floor ( tzOffset / 60 ) ;
2029+ let offsetMinutes = tzOffset % 60 ;
2030+ finalDate += String ( offsetHours ) . padStart ( 2 , "0" ) ;
2031+ finalDate += String ( offsetMinutes ) . padStart ( 2 , "0" ) ;
2032+ return finalDate ;
2033+ }
20182034 function convertDate ( field , format ) {
20192035 if ( ! field ) {
20202036 return "" ;
20212037 }
20222038 let dt = new Date ( field ) ;
2039+ let pad = ( n , d ) => ( "000" + n ) . slice ( - d ) ;
2040+ if ( ! convertToLocalTime ) {
2041+ let tzOffset = dt . getTimezoneOffset ( ) ; // returns the difference in minutes.
2042+ dt . setMinutes ( dt . getMinutes ( ) + tzOffset ) ;
2043+ }
20232044 let formatedDate = "" ;
20242045 let remaining = format ;
20252046 while ( remaining ) {
@@ -2044,6 +2065,23 @@ function RecordTable(vm) {
20442065 } else if ( remaining . match ( / ^ S S S / ) ) {
20452066 remaining = remaining . substring ( 3 ) ;
20462067 formatedDate += ( "00" + dt . getMilliseconds ( ) ) . slice ( - 3 ) ;
2068+ } else if ( remaining . match ( / ^ \+ / ) ) { //+0000
2069+ remaining = remaining . substring ( 1 ) ;
2070+ formatedDate += ( dt . getTimezoneOffset ( ) <= 0 ? "+" : "-" ) ;
2071+ } else if ( remaining . match ( / ^ F F / ) ) { //+0000
2072+ remaining = remaining . substring ( 2 ) ;
2073+ if ( convertToLocalTime ) {
2074+ formatedDate += pad ( Math . floor ( Math . abs ( dt . getTimezoneOffset ( ) ) / 60 ) , 2 ) ;
2075+ } else {
2076+ formatedDate += "00" ;
2077+ }
2078+ } else if ( remaining . match ( / ^ f f / ) ) {
2079+ remaining = remaining . substring ( 2 ) ;
2080+ if ( convertToLocalTime ) {
2081+ formatedDate += pad ( Math . abs ( dt . getTimezoneOffset ( ) ) % 60 , 2 ) ;
2082+ } else {
2083+ formatedDate += "00" ;
2084+ }
20472085 } else {
20482086 formatedDate += remaining [ 0 ] ;
20492087 remaining = remaining . substring ( 1 ) ;
0 commit comments