You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							26 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							26 lines
						
					
					
						
							1.2 KiB
						
					
					
				| var MILLISECONDS_IN_MINUTE = 60000;
 | |
| 
 | |
| function getDateMillisecondsPart(date) {
 | |
|   return date.getTime() % MILLISECONDS_IN_MINUTE;
 | |
| }
 | |
| /**
 | |
|  * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.
 | |
|  * They usually appear for dates that denote time before the timezones were introduced
 | |
|  * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891
 | |
|  * and GMT+01:00:00 after that date)
 | |
|  *
 | |
|  * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,
 | |
|  * which would lead to incorrect calculations.
 | |
|  *
 | |
|  * This function returns the timezone offset in milliseconds that takes seconds in account.
 | |
|  */
 | |
| 
 | |
| 
 | |
| export default function getTimezoneOffsetInMilliseconds(dirtyDate) {
 | |
|   var date = new Date(dirtyDate.getTime());
 | |
|   var baseTimezoneOffset = Math.ceil(date.getTimezoneOffset());
 | |
|   date.setSeconds(0, 0);
 | |
|   var hasNegativeUTCOffset = baseTimezoneOffset > 0;
 | |
|   var millisecondsPartOfTimezoneOffset = hasNegativeUTCOffset ? (MILLISECONDS_IN_MINUTE + getDateMillisecondsPart(date)) % MILLISECONDS_IN_MINUTE : getDateMillisecondsPart(date);
 | |
|   return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset;
 | |
| } |