使用new Date()。toLocaleTimeString()时获取millis

时间:2018-05-01 03:13:46

标签: javascript node.js date

我有这段代码:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

  if chosenFoodObject == nil{
    // User Chose a Food
    chosenFoodObject = latestHitArray[indexPath.row]

    // Update food download index
    updateDownloadScore(foodID: chosenFoodObject!["objectID"] as! String)

    // Gives size options for selected food
    var sizeArray: [String]
    sizeArray = Array(chosenFoodObject!.keys)
    listResults.removeAll()

    if let highlightIndex = sizeArray.index(of: "_highlightResult") {
      sizeArray.remove(at: highlightIndex)
    }

    if let nameIndex = sizeArray.index(of: "name") {
      sizeArray.remove(at: nameIndex)
    }

    if let downloadIndex = sizeArray.index(of: "downloads") {
      sizeArray.remove(at: downloadIndex)
    }

    if let photoIndex = sizeArray.index(of: "photoURL") {
      sizeArray.remove(at: photoIndex)
    }

    if let idIndex = sizeArray.index(of: "objectID") {
      sizeArray.remove(at: idIndex)
    }

    for word in sizeArray{
      listResults.append(word)
    }

    tableView.setContentOffset(CGPoint.zero, animated: false)
    self.tableView.reloadData()
  }
  else{
    // User chose a size
    chosenSize = listResults[indexPath.row]

    showFoodAlertController()
  }
}   //CRASH HAPPENS HERE

它产生这样的东西:

v.d = new Date().toLocaleTimeString();

所以这是第二天的时间,没有毫秒。 我的问题是:是否有内置调用可以显示毫秒的时间?

我正在寻找类似的东西(毫秒级):

20:11:40

4 个答案:

答案 0 :(得分:2)

这样可行,但如果可能的话,我正在寻找更紧凑的东西:

 const d = new Date();
 v.d = d.toLocaleTimeString() + `.${d.getMilliseconds()}`;

这会产生:

20:17:30.744

请注意,为了使这项工作更好,您需要添加此部分: Formatting milliseconds to always 3 digits for d.getMilliseconds() call

答案 1 :(得分:1)

有ISOString()。但退回一个级别,除了这个例外,没有标准格式化js中的日期。因此,您可以使用toISOString或使用各个日期函数构建自己的字符串。

答案 2 :(得分:1)

我确实发现原始解决方案存在一个问题。当我执行它时,它会产生hh:mm:ss PM.mil。我假设您需要hh:mm:ss.mil这是作为函数编写的解决方案,因此您可以传递日期对象并获得正确的格式:

const d = new Date()

const getTimeWithMilliseconds = date => {
  const t = d.toLocaleTimeString();
  return `${t.substring(0,8)}.${date.getMilliseconds() + t.substring(8,11)}`;
}

console.log(getTimeWithMilliseconds(d));

或者如果你想要24小时格式:

const d = new Date()

const getTimeWithMilliseconds = date => {
  return `${date.toLocaleTimeString('it-US')}.${date.getMilliseconds()}`;
}

console.log(getTimeWithMilliseconds(d));

答案 3 :(得分:0)

您不能依赖 toLocaleTimeString 返回特定格式,因为它依赖于实现。自己构建格式更加可靠,例如:



function getFormattedTime(date) {
  var d = date || new Date();
  var z = n => ('0'+n).slice(-2);
  var zz = n => ('00'+n).slice(-3);
  return `${z(d.getHours())}:${z(d.getMinutes())}:${z(d.getSeconds())}.${zz(d.getMilliseconds())}`;
}

console.log(getFormattedTime());
console.log(getFormattedTime(new Date(2018,1,1)));
console.log(getFormattedTime(new Date(2018,4,30,23,51,12,89)));




另见Where can I find documentation on formatting a date in JavaScript?