使用每个小技巧的日期显示在精巧的显示中阻碍了我的逻辑

问题描述

我使用Sapper将订单数据保存到我的mongodb中。一个字段可节省输入订单的时间。我正在尝试在用户仪表板的正面显示订单时间(订单名称,日期和时间)。

一切正常,除了一个js日期fn给我错误。让我解释: 我的代码很简单,我在预加载fn中使用fetch

    <script context="module">
     
      export async function preload(page,session) {
          const res = await this.fetch(`protectedpageserver`,{
          credentials: 'include'
       });      

      let response = await res.json()
      return { data: response }
     }
 </script>
    
<script>
      export let data
</script>
    
<ol>
  {#each data as link}
  <li >
    <p><b> Order </b> : {link.order} </p>
    <p> Date : {link.enteredAt.substring(0,10)} </p>
    <p> Time : {link.enteredAt.substring(11,19)}</p>
    <p>
      Time : {link.enteredAt.toLocaleTimeString(undefined,{    
      hour: '2-digit',minute: '2-digit'
      })}</p>
      
  </li>
  {/each}
</ol>

第一次substring()fn工作:

 <p> Time : {link.enteredAt.substring(11,19)}</p>

第二次toLocaleTimeString()fn给我错误

TypeError: link.enteredAt.toLocaleTimeString is not a function

我的问题是为什么? 我可以在forEach()中的服务器路由上处理toLocaleTimeString(),并为前端提供所需的时间格式,但这使我好奇为什么一个fn在工作,而第二个fn在尽管都为js的情况下仍产生错误日期功能。为什么会这样呢?我可以用其他方式编写toLocaleTimeString()使其工作吗?

解决方法

您正在将字符串传递给函数toLocaleTimeString,该函数是Javascript Date对象的实例方法。我知道这是一个字符串,因为它可以与substring()一起使用,该字符串需要一个字符串,并且如果您将日期对象传递给它,则将不起作用。

但是假设字符串link.enteredAt为日期形,则以下操作将起作用,因为Svelte允许您在花括号中运行JS。

<p>
    Time : {new Date(link.enteredAt).toLocaleTimeString(undefined,{    
    hour: '2-digit',minute: '2-digit'
})}</p>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...