使用每个块的 sapper-svelte 中的日期时间显示抵制我的逻辑

Date-Time display in sapper-svelte using each bloack is resisting my logic

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

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

    <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 正在工作而第二个却产生错误,尽管两者都是 js日期函数。为什么会有这种行为?我可以用不同的方式编写 toLocaleTimeString() 以使其工作吗?

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

但是假设字符串 link.enteredAt 是日期的形状,下面的内容将起作用,因为 Svelte 允许您 运行 大括号中的 JS。

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