【问题标题】:Day Name for a calculated date计算日期的日期名称
【发布时间】:2019-03-07 11:21:01
【问题描述】:

您好,我是 Java 新手,我正在尝试为计算的日期锻炼日期名称。 我正在使用 Esko Automation Engine 运行我的 Java

如果我根据实际日期创建一个 JavaScript 脚本,它会使用以下函数进行计算:

function f () {
    var date = new Date().toString().split(' ')[0];
    return date;
}

f ();

但是当我尝试用另一个计算日期替换 new Date() 时,它失败了。 计算的日期显示如下:05/02/19 10:00am,并从 xml 文件中删除。 这被命名为 ScotlandDeliveryDate

function f () {
    var date = ScotlandDeliveryDate ().toString().split(' ')[0];
    return date;
}

f ();

结果:

javax.script.ScriptException: <eval>:4:25 Missing space after numeric literal
var date = 05/02/19 10:00am().toString().split(' ')[0];
^ in <eval> at line number 4 at column number 25

请问有人有什么想法吗?

【问题讨论】:

  • 我能知道ScotlandDeliveryDate 之后大括号的用途是什么吗?我认为 ScotlandDeliveryDate 是一个以日期为值的变量。尝试删除它并编写 var date = ScotlandDeliveryDate.toString().split(' ')[0];
  • 什么是ScotlandDeliveryDateDate?一个函数?
  • 如果我能数数,第 25 列将是 am 所在的位置或紧接其前面的 0 所在的位置。这是正确的吗?
  • 什么是ScotlandDeliveryDate?是一堂课吗?一个东西?也许你之前错过了new?或者ScotlandDeliveryDate之后应该有大括号
  • 我很困惑。您要的是 Java 代码还是 JavaScript 代码?您的问题究竟是什么?

标签: javascript java


【解决方案1】:

我对“Esko”一无所知。但是在上面给出的示例中,您试图在另一个 SmartName 的定义中使用一个 SmartName (ScotlandDeliveryDate)。在下面的链接中,他们似乎表明这是通过将 SmartName 括在括号中来完成的。

https://docs.esko.com/docs/en-us/automationengine/18/userguide/home.html#en-us/common/ae/concept/co_ae_SN_Script_Exa.html

所以我认为您的代码需要如下所示:

function f () {
   return '[ScotlandDeliveryDate]'.split(' ')[0];
}
f ();

但是,从您的错误消息来看,[ScotlandDeliveryDate] 似乎将返回 05/02/19 10:00am;如果是这种情况,那么将该值拆分为空格,然后获取第一个值仍然不会为您提供日期名称。

要做到这一点,你需要这样的东西:

function f () {
   var monthDayYear = '[ScotlandDeliveryDate]'.split(' ')[0];
   var dateTimeStamp = Date.parse(monthDayYear);
   var dateObject = new Date(dateTimeStamp);
   return new Intl.DateTimeFormat('en-US', {weekday:'long'}).format(dateObject);
}
f ();

或者,没有 Intl 对象:

function f () {
   var dayNames = [
      'Sunday',
      'Monday',
      'Tuesday',
      'Wednesday',
      'Thursday',
      'Friday',
      'Saturday'
   ];
   var monthDayYear = '[ScotlandDeliveryDate]'.split(' ')[0];
   var dateTimeStamp = Date.parse(monthDayYear);
   var dateObject = new Date(dateTimeStamp);
   var dayNumber = dateObject.getDay();
   return dayNames[dayNumber];
}
f ();

【讨论】:

  • 如果我运行你的第一个示例,我得到结果 05/02/19 但第二个函数失败:结果:javax.script.ScriptException:ReferenceError:“Intl”未在 中定义第 5 行
  • Intl 包是用于日期转换/操作的标准内置 Javascript 对象之一,您在“Esko”环境中可能没有这些对象。这只是意味着您必须手动进行转换。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 所以在dateObject 值(上图)上,您将调用dateObject.getDay()。这将返回对应于一周中某一天的 0-6 序数。
  • 你像这样创建一个引用数组:var dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
  • 然后您就可以轻松地将该日期数字转换为正式名称。
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 2014-09-19
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多