【问题标题】:Datetime from Angular to asp .NET (boilerplate)从 Angular 到 asp .NET 的日期时间(样板文件)
【发布时间】:2021-04-26 17:41:30
【问题描述】:

我不知道如何以日期时间格式从 Angular UI 获取日期时间(事件发生时)到我的 Microsoft SQL 数据库。那是 DB 中的格式:0001-01-01 00:00:00.0000000,但老实说,我没有那么远。

    <div class="form-group row required">
      <label class="col-md-3 col-form-label" for="eventTime">
        {{ "EventTime" | localize }}
      </label>
      <div class="col-md-9">
        <input
          type="datetime-local"
          class="form-control"
          name="eventTime"
          id="eventTime"
          required
          [(ngModel)]="event.eventTime"
          #eventTimeModel="ngModel"
          #eventTimeEl
        />
        <abp-validation-summary
          [control]="eventTimeModel"
          [controlEl]="eventTimeEl"
        ></abp-validation-summary>
      </div>
    </div>

我已经收到了

        data = typeof data === 'object' ? data : {};
        data["categoryId"] = this.categoryId;
        data["category"] = this.category ? this.category.toJSON() : <any>undefined;
        data["name"] = this.name;
        data["description"] = this.description;
        data["location"] = this.location;
        data["phone"] = this.phone;
        data["email"] = this.email;
        data["notes"] = this.notes;
        data["limit"] = this.limit;
        data["creationTime"] = this.creationTime ? this.creationTime.toISOString() : <any>undefined;
        data["eventTime"] = this.eventTime ? this.eventTime.toISOString() : <any>undefined;

我的结局很糟糕

ERROR TypeError: this.eventTime.toISOString is not a function
    at EventDto.push.KALY.EventDto.toJSON (main.js:12020)
    at JSON.stringify (<anonymous>)
    at EventServiceProxy.push.KALY.EventServiceProxy.create (main.js:7969)
    at CreateEventDialogComponent.push.aZhx.CreateEventDialogComponent.save (create-event-dialog.component.ts:53)

我该怎么办?为简化起见,我可以假设时区不变且不变。

编辑: 寻找合适的日期选择器

<div class="form-group row required">
          <label class="col-md-3 col-form-label" for="eventTime">
            {{ "EventTime" | localize }}
          </label>
          <div class="col-md-9">
            <input
            class="form-control"
            required
            [(ngModel)]="event.eventTime"
            name="eventTime"
            id="eventTime"
            [owlDateTimeTrigger]="dtPicker1" [owlDateTime]="dtPicker1">
            <owl-date-time #dtPicker1></owl-date-time>

        data["eventTime"] = this.eventTime ? new Date().toISOString().slice(0, 19).replace('T', ' ') : <any>undefined; ///SUCCESS!!
    

为我做的。

【问题讨论】:

  • 你得到什么错误?我看到堆栈跟踪,但没有实际错误。
  • 请添加更多详细信息。从您的问题中非常不清楚您的错误是什么以及它是如何发生的。您没有包含完整的方法、堆栈跟踪等。我的猜测是您的问题是您在字符串上调用.toISOString(),而不是日期。输入值本质上是字符串,需要转换为日期。我没有看到您在代码中这样做。例子可以看here
  • ERROR TypeError: this.eventTime.toISOString is not an function at EventDto.push.KALY.EventDto.toJSON (main.js:12020) at JSON.stringify () at EventServiceProxy.push .KALY.EventServiceProxy.create (main.js:7969) at CreateEventDialogComponent.push.aZhx.CreateEvent 对不起,它切断了
  • 请“编辑”您的原始帖子(而不是添加评论)。请复制/粘贴 1) 完整的回溯,带有错误文本,AND 2) JSON 消息文本。但是您已经告诉我们足够多的信息来验证问题在于您的字段 NOT 被识别为“日期”对象。我猜? JSON 可能以“数字”或“字符串”的形式出现。再次 - 请向我们展示 JSON!
  • 抱歉,我只是不明白你显示 JSON 的意思 :( 我试图记录该值,至少,以了解该日期选择器的结果 - 从来没有显示任何其他未定义的东西,所以很明显我也做错了。

标签: asp.net angular datetime


【解决方案1】:

您可能知道,日期/时间值作为与epoch 相关的整数存储在数据库中(例如,自 1970 年 1 月 1 日以来的 #/秒)。 NOT 像“MM/dd/yyyy”这样的值,并且对于任何“时区”当然NOT。该值是任何时区的INDEPENDENT。在您的情况下,您读入 Angular 的数字(日期/时间值)恰好是“0”。

问:如果您的程序遇到日期/时间值“0”,您希望其表现如何?请澄清“预期行为”。

问:实际的错误是什么?您包含了堆栈跟踪...但没有包含错误消息。请将此添加到您的帖子中。

问:输入的 JSON 是什么样的?您能否将相关的 JSON 复制/粘贴到您的帖子中?

请更新您的帖子,以便我们为您提供更明智的答案:)

【讨论】:

  • 不应发生日期时间值 0,它是 null 或日期。问题确实出在 toISOString() 方法上,但我不知道如何在此上下文中从提供给 Date 对象的字符串中获取。或者我是否应该以不同的方式处理这个问题。
  • 我终于让控制台日志为此工作,结果发现 datetime-local 返回未定义。 sConsole(event) { var data = document.getElementById("eventTime"); console.log(data["eventTime"])} 但我不知道为什么。
  • “日期时间值 0 不应该发生,它要么为空,要么为日期”。这不一定是真的!通常(特别是如果您使用实体框架开发架构,而不是“原始 SQL”),如果在此期间未提供日期值,则该列将默认为“0”(NOT“null”) “插入”。但是您需要查看消息(“数据”)中的实际 JSON。其他任何事情都是“纯粹的猜测”。我们正在等待您更新您的帖子...
  • 搞定了!数据["eventTime"] = this.eventTime ? new Date().toISOString().slice(0, 19).replace('T', ' ') : undefined;加上 [owlDateTimeTrigger]="dtPicker1" [owlDateTime]="dtPicker1"> 为我做了成功。谢谢!如果我也只能弄清楚角度分量的组成:D
【解决方案2】:

寻找合适的日期选择器

<div class="form-group row required">
          <label class="col-md-3 col-form-label" for="eventTime">
            {{ "EventTime" | localize }}
          </label>
          <div class="col-md-9">
            <input
            class="form-control"
            required
            [(ngModel)]="event.eventTime"
            name="eventTime"
            id="eventTime"
            [owlDateTimeTrigger]="dtPicker1" [owlDateTime]="dtPicker1">
            <owl-date-time #dtPicker1></owl-date-time>


        data["eventTime"] = this.eventTime ? new Date().toISOString().slice(0, 19).replace('T', ' ') : <any>undefined; ///SUCCESS!!
    

为我做的。

【讨论】:

  • 一切顺利。但是.... 1) 如果您在数据库中进行了“选择”,您可能会看到 EITHER "null" OR "0001-01-01 00:00: 00.0000000",具体取决于列的定义方式。实体框架通常设置默认值“0001-01-01 00:00:00.0000000”,或纪元值“0”。 2) MATTERS 是“this.eventTime”的 JSON,您未能向我们展示。 3)无论如何 - 很高兴你知道如何获得你正在寻找的行为:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2016-03-05
  • 2019-07-10
  • 2017-06-10
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多