转换为 ISO 字符串后返回日期/时间而不切片的另一种方法?
Posted
技术标签:
【中文标题】转换为 ISO 字符串后返回日期/时间而不切片的另一种方法?【英文标题】:Another way to return the date/time without slicing after converting to ISOString? 【发布时间】:2019-12-07 19:29:47 【问题描述】:我有以下 JSON 字符串,我想从中提取日期和时间:
"id": 1, "time": "date": "2019-06-12 11:51:22.000000", "timezone_type": 3, "timezone": "UTC" , "productCategory": "some cat", "kitchen": "house": "id": 555, "name": "bigHouse" , "id": 55, "name": "smallKitchen", "country": "US"
我目前是这样做的:
<tr v-for="(cabinet, i) in cabinets">
<td> cabinet.kitchen.id </td>
<td> cabinet.productCategory </td>
<td> getDate(cabinet.time.date) </td>
<td> getTime(cabinet.time.date) </td>
</tr>
<script>
const axios = require('axios');
export default
name: "Cabinets",
data()
return
bedroom : this.$session.get('bedroom').id,
cabinets: []
,
mounted()
axios(
method: 'GET',
url: `/bedroom/$this.bedroom/cabinets`
)
.then(response =>
this.cabinets = response.data
)
,
methods:
getDate(datetime)
return new Date(datetime).toISOString().slice(0,10);
,
getTime(datetime)
return new Date(datetime).toISOString().slice(11,19);
</script>
日期可以正常工作,但时间不行。日期和时间分别返回如下:2019-06-12
和09:51:22
。时间应该是11:51:22
。这可能是因为我在尝试获取时间时使用了 Date()
方法,但是当我尝试使用 Time()
时出现错误:
[Vue 警告]:渲染错误:“ReferenceError:时间未定义”。
然而,即使我当时能找到一个非常简单的修复方法,我也真的不喜欢这种切片方式,并且正在寻找可以为我做到这一点的方法,因为如您所见,切片字符串已经出现故障。
【问题讨论】:
【参考方案1】:您收到该错误的原因是 javascript 中没有 Time 对象。
更强大的方法是 Date 的toLocaleTimeString()
。
您可以在 getTime() 方法中使用它:new Date(dateTime).toLocaleTimeString()
。
注意 toLocaleTimeString() 将显示用户机器文化指定的时间。
You can override this behavior, though.
【讨论】:
【参考方案2】:简而言之,没有。约会是出了名的麻烦。我相信最受欢迎的包是Moment.js。确保将日期以标准 ISO 格式存储到数据库中,然后在从数据库中提取日期后在前端修改日期。
【讨论】:
【参考方案3】:The "right" format for dates in JSON is ISO。我不认识你的时间对象。是标准格式吗?无论如何,因为它是 UTC,您可以轻松地使用字符串方法创建 ISO 日期,使用内置的 Date 对象对其进行解析,然后使用 toLocaleTimeString 对其进行格式化。要解析,请执行此操作...
new Date(time.date.replace(" ","T") + "Z").toLocaleString(,timeZone:"UTC")
.toLocaleDateString()
.toLocaleTimeString()
请注意,不要只获取您的日期字符串并将其提供给 Date 对象。未指定时区,因此解析器可能会或可能不会假设它是本地日期时间。 iso 字符串末尾的 Z 指示解析器它是 UTC,这就是它在您的 json 中所说的。
【讨论】:
以上是关于转换为 ISO 字符串后返回日期/时间而不切片的另一种方法?的主要内容,如果未能解决你的问题,请参考以下文章
将 ISO 8601 日期时间字符串转换为 **Date** 对象时,如何将日期时间重新定位到当前时区?
Python - 将日期的字符串表示形式转换为 ISO 8601