【问题标题】:How to convert datetime string to date in SAPUI5?如何在 SAPUI5 中将日期时间字符串转换为日期?
【发布时间】:2020-08-10 16:11:37
【问题描述】:

我正在尝试在 SAPUI5 中将字符串转换为日期

var Fdate = "2020-08-01T00:00:00";
var dateFormat = sap.ui.core.format.DateFormat.getDateInstance({
    pattern: "dd/MM/yyyy"
});
fdateFormatted = dateFormat.format(Fdate);

但这会返回以下错误:

未捕获的类型错误:j.getTime 不是函数

我尝试将源模式设置为“yyyy-MM-ddTHH:mm:ss”。但这会返回相同的错误。

【问题讨论】:

    标签: javascript date datetime sapui5


    【解决方案1】:

    在 JS 中

    // DateFormat required from "sap/ui/core/format/DateFormat"
    const dt = DateFormat.getDateTimeInstance({ pattern: "dd/MM/yyyy" });
    const jsDateObject = dt.parse("2020-08-01T00:00:00"); // returns: Sat Aug 01 2020 00:00:00 <timezone information>
    const dayMonthYear = dt.format(jsDateObject) // returns: "01/08/2020"
    • 如果字符串包含日期时间,则通过日期时间实例对其进行解析。api
    • .parseapi 等待一个字符串值并将其转换为 JS 日期(例如用于将其存储在模型中)。
    • .formatapi 等待 JS 日期并将其转换为字符串表示形式(例如用于在 UI 中显示)。

    双向数据绑定(Model-View-ViewModel 模式)

    类似于https://stackoverflow.com/a/63131534/5846045:

    <DatePicker value="{
      path: '/MyDateTimeString',
      type: 'sap.ui.model.type.Date',
      formatOptions: {
        source: {
          pattern: 'yyyy-MM-ddTHH:mm:ss'
        }
      }
    }" />
    

    然后框架将自动使用.format.parse。 IE。用户可以在 UI 中选择或输入日期,然后输入的内容将被解析并存储为模型中的 JS 日期,而无需编写任何 JS 代码。

    sap.ui.getCore().attachInit(() => sap.ui.require([
      "sap/ui/core/mvc/XMLView",
      "sap/ui/model/json/JSONModel", // sample model. Works also with ODataModel.
    ], (XMLView, MyModel) => XMLView.create({
      definition: `<mvc:View xmlns:mvc="sap.ui.core.mvc">
        <VBox xmlns="sap.m" class="sapUiTinyMargin">
          <DatePicker
            width="12rem"
            value="{
              path: '/MyDateTimeString',
              type: 'sap.ui.model.type.Date',
              formatOptions: {
                source: {
                  pattern: 'yyyy-MM-ddTHH:mm:ss'
                }
              }
            }"
          />
          <ObjectAttribute
            title="Model"
            text="&#34;{/MyDateTimeString}&#34;"
          />
        </VBox>
      </mvc:View>`,
      models: new MyModel({ // e.g. v2.ODataModel
        MyDateTimeString: "2020-08-01T00:00:00", // Type="Edm.String"
      }),
    }).then(control => control.placeAt("content"))));
    <script id="sap-ui-bootstrap"
      src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
      data-sap-ui-libs="sap.ui.core,sap.m"
      data-sap-ui-theme="sap_fiori_3"
      data-sap-ui-async="true"
      data-sap-ui-compatversion="edge"
      data-sap-ui-xx-waitfortheme="init"
    ></script><body id="content" class="sapUiBody sapUiSizeCompact"></body>

    点击“Show code sn-p”和Run code sn-p查看演示。

    【讨论】:

      【解决方案2】:

      格式化函数需要一个日期对象。

      var Fdate = "2020-08-01T00:00:00";
      var date = new Date(Fdate);
      var dateFormat = sap.ui.core.format.DateFormat.getDateInstance({
          pattern: "dd/MM/yyyy"
      });
      fdateFormatted = dateFormat.format(date);
      

      【讨论】:

      • 如果将 JavaScript 日期放在 OData 调用中,其行为是否会有所不同?实际上,我正在 OData 的成功方法中尝试这种转换。不知何故,我无法在那里使用 JavaScript 的日期。
      • Marc 啊,是的,谢谢,修复了答案如果我没记错的话,比如“\/Date(1596232800000)\/”。
      • @d33a 由于有关 OData 的问题是一个截然不同的问题,请打开一个新问题并提供更多详细信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2015-11-24
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多