1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5var timeutil = (function() { 6 'use strict'; 7 8 /** 9 * Offset needed to convert event times to Date objects. 10 * Updated whenever constants are loaded. 11 */ 12 var timeTickOffset = 0; 13 14 /** 15 * Sets the offset used to convert tick counts to dates. 16 */ 17 function setTimeTickOffset(offset) { 18 // Note that the subtraction by 0 is to cast to a number (probably a float 19 // since the numbers are big). 20 timeTickOffset = offset - 0; 21 } 22 23 /** 24 * The browser gives us times in terms of "time ticks" in milliseconds. 25 * This function converts the tick count to a Javascript "time", which is 26 * the UTC time in milliseconds. 27 * 28 * @param {string} timeTicks A time represented in "time ticks". 29 * @return {number} The Javascript time that |timeTicks| represents. 30 */ 31 function convertTimeTicksToTime(timeTicks) { 32 return timeTickOffset + (timeTicks - 0); 33 } 34 35 /** 36 * The browser gives us times in terms of "time ticks" in milliseconds. 37 * This function converts the tick count to a Date() object. 38 * 39 * @param {string} timeTicks A time represented in "time ticks". 40 * @return {Date} The time that |timeTicks| represents. 41 */ 42 function convertTimeTicksToDate(timeTicks) { 43 return new Date(convertTimeTicksToTime(timeTicks)); 44 } 45 46 /** 47 * Returns the current time. 48 * 49 * @return {number} Milliseconds since the Unix epoch. 50 */ 51 function getCurrentTime() { 52 return Date.now(); 53 } 54 55 /** 56 * Adds an HTML representation of |date| to |parentNode|. 57 * 58 * @param {DomNode} parentNode The node that will contain the new node. 59 * @param {Date} date The date to be displayed. 60 * @return {DomNode} The new node containing the date/time. 61 */ 62 function addNodeWithDate(parentNode, date) { 63 var span = addNodeWithText(parentNode, 'span', dateToString(date)); 64 span.title = 't=' + date.getTime(); 65 return span; 66 } 67 68 /** 69 * Returns a string representation of |date|. 70 * 71 * @param {Date} date The date to be represented. 72 * @return {string} A string representation of |date|. 73 */ 74 function dateToString(date) { 75 var dateStr = date.getFullYear() + '-' + 76 zeroPad_(date.getMonth() + 1, 2) + '-' + 77 zeroPad_(date.getDate(), 2); 78 79 var timeStr = zeroPad_(date.getHours(), 2) + ':' + 80 zeroPad_(date.getMinutes(), 2) + ':' + 81 zeroPad_(date.getSeconds(), 2) + '.' + 82 zeroPad_(date.getMilliseconds(), 3); 83 84 return dateStr + ' ' + timeStr; 85 } 86 87 /** 88 * Prefixes enough zeros to |num| so that it has length |len|. 89 * @param {number} num The number to be padded. 90 * @param {number} len The desired length of the returned string. 91 * @return {string} The zero-padded representation of |num|. 92 */ 93 function zeroPad_(num, len) { 94 var str = num + ''; 95 while (str.length < len) 96 str = '0' + str; 97 return str; 98 } 99 100 return { 101 setTimeTickOffset: setTimeTickOffset, 102 convertTimeTicksToTime: convertTimeTicksToTime, 103 convertTimeTicksToDate: convertTimeTicksToDate, 104 getCurrentTime: getCurrentTime, 105 addNodeWithDate: addNodeWithDate, 106 dateToString: dateToString 107 }; 108})(); 109