Passed
Push — master ( 937909...503c6a )
by Eduardo
02:32
created

conversions.js ➔ getDate   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 3
c 0
b 0
f 0
nc 2
dl 0
loc 4
rs 10
nop 1
1
// Human readable file size
2
function byteToHumanFileSize(bytes, si = true) {
3
  var thresh = si ? 1000 : 1024;
4
  if (Math.abs(bytes) < thresh) {
5
    return bytes + ' B';
6
  }
7
  var units = si ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
8
  var u = -1;
9
  do {
10
    bytes /= thresh;
11
    ++u;
12
  } while (Math.abs(bytes) >= thresh && u < units.length - 1);
13
  return bytes.toFixed(1) + ' ' + units[u];
14
}
15
16
// Convert milliseconds to String, human readable
17
function msToHumanTime(duration) {
18
  var milliseconds = parseInt((duration % 1000) / 100),
19
    seconds = parseInt((duration / 1000).toFixed(6) % 60),
20
    minutes = parseInt((duration / (1000 * 60)).toFixed(6) % 60),
21
    hours = parseInt((duration / (1000 * 60 * 60)).toFixed(6) % 24),
22
    days = parseInt((duration / (1000 * 60 * 60 * 24)).toFixed(6) % 7),
23
    weeks = parseInt((duration / (1000 * 60 * 60 * 24 * 7)).toFixed(6) % 4),
24
    months = parseInt((duration / (1000 * 60 * 60 * 24 * 7 * 4)).toFixed(6) % 12),
25
    years = parseInt((duration / (1000 * 60 * 60 * 24 * 7 * 4 * 12)).toFixed(6) % 10);
26
  var time = '';
27
28
  (years < 1) ? true : time += months + 'Y';
29
  (months < 1) ? true : time += months + 'M';
30
  (weeks < 1) ? true : time += weeks + 'w';
31
  (days < 1) ? true : time += days + 'd';
32
  (hours < 1) ? true : time += hours + 'h';
33
  (minutes < 1) ? true : time += minutes + 'm';
34
  (seconds < 1) ? true : time += seconds + 's';
35
  (milliseconds < 125) ? true : time += milliseconds + 'ms';
36
37
  (duration >= 0) ? true : time = '-';
38
39
40
  return time;
41
}
42
43
// Convert milliseconds to String, hum readable
44
function msToHumanTimeLegacy(milliseconds) {
45
46
  function numberEnding(number) {
47
    return (number > 1) ? 's' : '';
48
  }
49
50
  var temp = Math.floor(milliseconds / 1000);
51
  var years = Math.floor(temp / 31536000);
52
  if (years) {
53
    return years + ' year' + numberEnding(years);
54
  }
55
  //TODO: Months! Maybe weeks?
56
  var days = Math.floor((temp %= 31536000) / 86400);
57
  if (days) {
58
    return days + ' day' + numberEnding(days);
59
  }
60
  var hours = Math.floor((temp %= 86400) / 3600);
61
  if (hours) {
62
    return hours + ' hour' + numberEnding(hours);
63
  }
64
  var minutes = Math.floor((temp %= 3600) / 60);
65
  if (minutes) {
66
    return minutes + ' minute' + numberEnding(minutes);
67
  }
68
  var seconds = temp % 60;
69
  if (seconds) {
70
    return seconds + ' second' + numberEnding(seconds);
71
  }
72
  return 'less than a second'; //'just now' //or other string you like;
73
}
74
75
// Get refined date from source
76
function getDate(date) {
77
  if (date == null || date == '' || date == false ) return;
0 ignored issues
show
Best Practice introduced by
Comparing date to null using the == operator is not safe. Consider using === instead.
Loading history...
Comprehensibility Best Practice introduced by
Are you sure this return statement is not missing an argument? If this is intended, consider adding an explicit undefined like return undefined;.
Loading history...
78
  return new Date(Date.parse(date)).toUTCString();
79
}
80
81
module.exports = {
82
  byteToHumanFileSize: byteToHumanFileSize,
83
  msToHumanTime: msToHumanTime,
84
  msToHumanTimeLegacy: msToHumanTimeLegacy,
85
  getDate: getDate
86
};
87