mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 10:27:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const validatePattern = require('./pattern-validation');
 | |
| const convertExpression = require('./convert-expression');
 | |
| 
 | |
| function matchPattern(pattern, value){
 | |
|     if( pattern.indexOf(',') !== -1 ){
 | |
|         const patterns = pattern.split(',');
 | |
|         return patterns.indexOf(value.toString()) !== -1;
 | |
|     }
 | |
|     return pattern === value.toString();
 | |
| }
 | |
| 
 | |
| class TimeMatcher{
 | |
|     constructor(pattern, timezone){
 | |
|         validatePattern(pattern);
 | |
|         this.pattern = convertExpression(pattern);
 | |
|         this.timezone = timezone;
 | |
|         this.expressions = this.pattern.split(' ');
 | |
|     }
 | |
| 
 | |
|     match(date){
 | |
|         date = this.apply(date);
 | |
| 
 | |
|         const runOnSecond = matchPattern(this.expressions[0], date.getSeconds());
 | |
|         const runOnMinute = matchPattern(this.expressions[1], date.getMinutes());
 | |
|         const runOnHour = matchPattern(this.expressions[2], date.getHours());
 | |
|         const runOnDay = matchPattern(this.expressions[3], date.getDate());
 | |
|         const runOnMonth = matchPattern(this.expressions[4], date.getMonth() + 1);
 | |
|         const runOnWeekDay = matchPattern(this.expressions[5], date.getDay());
 | |
| 
 | |
|         return runOnSecond && runOnMinute && runOnHour && runOnDay && runOnMonth && runOnWeekDay;
 | |
|     }
 | |
| 
 | |
|     apply(date){
 | |
|         if(this.timezone){
 | |
|             const dtf = new Intl.DateTimeFormat('en-US', {
 | |
|                 year: 'numeric',
 | |
|                 month: '2-digit',
 | |
|                 day: '2-digit',
 | |
|                 hour: '2-digit',
 | |
|                 minute: '2-digit',
 | |
|                 second: '2-digit',
 | |
|                 hourCycle: 'h23',
 | |
|                 fractionalSecondDigits: 3,
 | |
|                 timeZone: this.timezone
 | |
|             });
 | |
|             
 | |
|             return new Date(dtf.format(date));
 | |
|         }
 | |
|         
 | |
|         return date;
 | |
|     }
 | |
| }
 | |
| 
 | |
| module.exports = TimeMatcher; |