Javascript Date.UTC()与moment.utc()

时间:2019-04-02 18:33:30

标签: javascript

我正在寻找用普通的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>
    );
  }
}

以上似乎是在做正确的事,但我想知道是否存在我没​​有想到的极端情况。

2 个答案:

答案 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