我正在寻找用普通的Javascript代替moment js功能-我需要重做的项目将不会有moment.js可用。我已经有一段时间没有使用javascript Date了,因此需要对此有一些了解。我的问题有两个方面。
第1部分:我通过Date.UTC()获得的内容与通过moment.utc()获得的值不同
var d = new Date(date);
var utcVal = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());
var d2 = new Date(utcVal);
var sec = d2.getSeconds()<10? "0"+d2.getSeconds():d2.getSeconds();
var mm = d2.getMonth()<10? "0"+(d2.getMonth()+1):d2.getMonth();
var formated = d2.getFullYear()+"-"+mm+"-"+d2.getDate()+"T"+d2.getHours()+":"+d2.getMinutes()+":"+sec+"Z";
//d2 formated: 2019-03-3T21:21:00Z
这是我的替代m.utc(它是设计师的改进):
//value: 2019-03-04T13:21:00Z
var m = moment.utc(value);
m.local();
return m.toDate();
我想要一种比上面的清洁得多的东西。最明显的问题是日期和时间都不正确。在不使用任何其他外部库的情况下如何解决此问题?
第2部分:我想确认一下我现在更换的东西是否正确:
var d = new Date(value);
return new Date(d.toLocaleString());
这里是我的替代品(似乎不使用.utc转换,而是使用.local):
import React, { Component } from "react";
import { Table, Checkbox } from "semantic-ui-react";
import format from "date-fns/format";
export default class TableRowWithSlider extends React.Component {
constructor(props) {
super(props);
this.state = {
exportSlider: false
};
}
slider = () => {
this.setState({ exportSlider: !this.state.exportSlider }, () => {
console.log("slider --> ", this.state.exportSlider);
const { id, slide } = this.props;
slide({ id, isExported: this.state.exportSlider });
});
};
render() {
const { id, startTime, selfUri, status } = this.props;
return (
<React.Fragment>
<Table.Row>
<Checkbox slider onChange={this.slider} />
<Table.Cell>{id}</Table.Cell>
<Table.Cell>{format(startTime, "MMM Do YYYY, h:mm:ss A")}</Table.Cell>
<Table.Cell>{selfUri}</Table.Cell>
<Table.Cell>{status}</Table.Cell>
</Table.Row>
</React.Fragment>
);
}
}
以上似乎是在做正确的事,但我想知道是否存在我没有想到的极端情况。
答案 0 :(得分:1)
对于第1部分,您应该研究library(tidyverse)
dat <- data.frame(text = c("time_suffer|suffer_employ|suffer_sick"),
stringsAsFactors = FALSE)
dat %>%
tidyr::separate(., col = "text", into = c("a","b","c"), sep = "\\|")
#> a b c
#> 1 time_suffer suffer_employ suffer_sick
方法。将其附加到Date对象,它将以所需的格式返回一个字符串,而工作量大大减少。
答案 1 :(得分:1)
我可能会误会,但似乎if constexpr (std::is_pointer<T>::value) {
return std::to_string(reinterpret_cast<std::uintptr_t>(val));
} else if constexpr (std::is_enum<T>::value)
{
return std::to_string(static_cast<std::underlying_type_t<T>>(val));
} else {
return std::to_string(val);
}
会满足此处的要求:
toISOString