问题描述
我使用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>