Snippets Collections
const formatDate = (date) =>
  new Intl.DateTimeFormat("en", {
    day: "numeric",
    month: "long",
    year: "numeric",
    weekday: "long",
  }).format(new Date(date));


  export default formatDate
    func timeAgoDisplay(previousTime : Int) -> String {
        
        let cTime = Int(NSDate().timeIntervalSince1970)
        let pTime = previousTime/1000
        
        let secondsAgo = cTime - pTime
        
        let minute = 60
        let hour = 60 * minute
        let day = 24 * hour
        let week = 7 * day
        let month = day * 30
        let year = month * 12
        
        
        
        if secondsAgo < minute {
            var txt = ""
            if secondsAgo == 1 {
                txt = "second ago"
            } else {
                txt = "seconds ago"
            }
            return "\(secondsAgo) \(txt)"
        } else if secondsAgo < hour {
            var txt = ""
            let minutes = secondsAgo / minute
            if minutes == 1 {
                txt = "minute ago"
            } else {
                txt = "minutes ago"
            }
            return "\(minutes) \(txt)"
        } else if secondsAgo < day {
            var txt = ""
            let hours = secondsAgo / hour
            if hours == 1 {
                txt = "hour ago"
            } else {
                txt = "hours ago"
            }
            return "\(hours) \(txt)"
        } else if secondsAgo < week {
            var txt = ""
            let days = secondsAgo / day
            if days == 1 {
                txt = "day ago"
            } else {
                txt = "days ago"
            }
            return "\(days) \(txt)"
        } else if secondsAgo < month {
            var txt = ""
            let weeks = secondsAgo / week
            if weeks == 1 {
                txt = "week ago"
            } else {
                txt = "weeks ago"
            }
            return "\(weeks) \(txt)"
        } else if secondsAgo < year {
            var txt = ""
            let months = secondsAgo / month
            if months == 1 {
                txt = "month ago"
            } else {
                txt = "months ago"
            }
            return "\(months) \(txt)"
        } else {
            var txt = ""
            let years = secondsAgo / year
            if years == 1 {
                txt = "year ago"
            } else {
                txt = "years ago"
            }
            return "\(years) \(txt)"
        }
    }
    func getDateTime(_ timeStamp : String,_ format: String) -> String {
        var t1 = Int(timeStamp) ?? 1
         t1 = t1/1000
        let date = NSDate(timeIntervalSince1970: TimeInterval(t1))
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        let dateString = dateFormatter.string(from: date as Date)
        print("Date = \(dateString)")
        return dateString
    }
(async () => {
  let threshold = 1000; // only show load times for widgets higher than this value (in milliseconds)
  var wa = $("div [widget='widget']").css("border", "1px solid red").css("padding-top", "20px").css("position", "relative")
  let widgetTable = [];
  let wmk = [];
  for (var i = 0; i < wa.length; i++) {
    let widgetEntry = {};
    $0 = wa[i]
    let scope = $($0).scope();
    try{
      var widget = scope.widget;
    } catch(e){
      console.error(e);
      continue;
    }
    var timing = 0;
    let elem = $("<div style='position: absolute; top: 1px; left: 1px'><a target='_blank' href='/$sp.do?id=widget_editor&sys_id=" + widget.sys_id + "'> " + widget.name + "</a>&nbsp;&nbsp;</div>");
    var printScope = $("<a href='javascript:void(0);'>Print scope </a>").on('click', function() {
      console.info(scope);
    });
    elem.append(printScope);
    widgetEntry.name = widget.name;
    widgetEntry.rectangle = widget.rectangle_id || 'undefined';
    widgetEntry.sys_id = widget.sys_id;
    let id = scope.widget.rectangle_id + "_" + scope.$id

    // if this is not a nested widget, go ahead and refresh it.
    if (!scope.$parent || !scope.$parent.widget) {
      var widget_name = widget.name;
      var t0 = performance.now();
      await scope.server.refresh();
      var t1 = performance.now();
      timing = "<div style='float:right;color:red;' id='" + id + "'> Load Time: " + parseInt(t1 - t0) + " ms.</div>";
      widgetEntry.load_time_ms = parseInt(t1 - t0) || 0;
      elem.append(timing);
    }
    // add a button to refresh manually.
    var loadTime = $("<button style='border-radius: 50%;'> ⟳ </button>").on('click', function() {
      var widget_name = scope.widget.name;
      let id = scope.widget.rectangle_id + "_" + scope.$id
      var t0 = performance.now();
      scope.server.refresh().then(() => {
        var t1 = performance.now();
        timing = "<div style='float:right;color:red;' id='" + id + "'> Load Time: " + parseInt(t1 - t0) + " ms.</div>";
        widgetEntry.load_time_ms = parseInt(t1 - t0) || 0;
        if ($('#' + id)) {
          $('#' + id).remove();
        }

        elem.append(timing);
        console.log("Call to " + widget_name + " took " + (t1 - t0) + " ms.");
      });
    });

    elem.append(loadTime);
    $($0).append(elem);
    widgetTable.push(widgetEntry);
  }
  widgetTable.sort((a, b) => (a.load_time_ms > b.load_time_ms) ? 1 : -1);
  var slow = widgetTable.filter((e, i, w) => {
    return e.load_time_ms >= threshold;
  });

  let mkdn = `|Name|sys_id|rectangle_id|Load Time Ms|
|:---:|:---:|:---:|:---:|
${slow.map((widgetEntry, i, widgetTable) => {
return `|${widgetEntry.name}|${widgetEntry.sys_id}|${widgetEntry.rectangle}|${widgetEntry.load_time_ms}|`;
}).join("\n")}`;
  var doCopy = function() {
    var el = document.createElement('textarea');
    el.value = mkdn;
    el.setAttribute('readonly', '');
    el.style = {
      position: 'absolute',
      left: '-9999px'
    };
    document.body.appendChild(el);
    el.select();
    document.execCommand('copy');
    document.body.removeChild(el);
  }
  var elem = `<div style="float: right;
z-index: 1;
position: relative;
left: -50%; /* or right 50% */
text-align: left;
padding:10px">
<h2>${(slow.length > 0)?"Slow Widgets:" : "No Slow Widgets Found!"}</h2>
<table style="padding:3px; display:${(slow.length > 0)?"table":"none"}">
<tr><td style="padding:3px;" >Name</td><td style="padding:3px;">sys_id</td><td style="padding:3px;">rectangle id</td><td style="padding:3px;">load time ms</td></tr>
${slow.map((widgetEntry, i, widgetTable) => {
return `<tr><td style="padding:3px;">${widgetEntry.name}</td><td style="padding:3px;">${widgetEntry.sys_id}</td><td style="padding:3px;">${widgetEntry.rectangle}</td><td style="padding:3px;">${widgetEntry.load_time_ms}</td></tr>`;
}).join(" ")}
</table>
<button onClick=${doCopy()} style="display:${(slow.length > 0)?"table":"none"}">Copy Markdown</button>
</div>`;
  $('body').append(elem);
})();
star

Sun Feb 11 2024 00:22:06 GMT+0000 (Coordinated Universal Time)

#format #date #js #time
star

Thu Feb 23 2023 19:17:31 GMT+0000 (Coordinated Universal Time)

#ios #swift #time #date #chat
star

Sat Jan 08 2022 09:39:33 GMT+0000 (Coordinated Universal Time)

#ios #swift #date #time #datetime
star

Thu Oct 01 2020 15:02:10 GMT+0000 (Coordinated Universal Time) https://hi.service-now.com/kb_view.do?sysparm_article=KB0744521

#slow #widget #page #portal #serviceportal #troubleshoot #support #loading #time

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension