Skip to content

Commit

Permalink
ENH: validate optional fractional seconds in acqTime
Browse files Browse the repository at this point in the history
  • Loading branch information
sappelhoff committed Jul 23, 2020
1 parent d4d0188 commit dde6e42
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions bids-validator/validators/tsv/checkAcqTimeFormat.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,34 @@ const Issue = require('../../utils').issues.Issue
import { isValid as dateIsValid, parse } from 'date-fns'

const checkAcqTimeFormat = function(rows, file, issues) {
const format = "yyyy-MM-dd'T'HH:mm:ss"
const header = rows[0]
const acqTimeColumn = header.indexOf('acq_time')
const testRows = rows.slice(1)
testRows.map((line, i) => {
var format = "yyyy-MM-dd'T'HH:mm:ss"
const lineValues = line
const acqTime = lineValues[acqTimeColumn]
let isValid = dateIsValid(parse(acqTime, format, new Date()))
if (acqTime === 'n/a') {
isValid = true
// Try different date formats: We accept any amount of optional fractional
// seconds: .S, .SS, .SSS, .SSSS, .SSSSS, .SSSSSS
var isValid = false
for (i = 0; i < 7; i++) {

isValid = dateIsValid(parse(acqTime, format, new Date()))

// exit early if date is valid or n/a
if (acqTime === 'n/a' | isValid) {
isValid = true
break
}

// If not valid, try again with parsing a new amount of fractional secs
if (i === 0) {
format += '.'
}
format += 'S'
}

// if the loop exits with !isValid, we need to raise an issue
if (acqTime && !isValid) {
issues.push(
new Issue({
Expand Down

0 comments on commit dde6e42

Please sign in to comment.