如何在Google Apps脚本中设置“ 2018-09-21 16:00:00 -0500”的格式?

时间:2018-09-20 06:37:36

标签: javascript date google-apps-script google-sheets

我有一个格式为“ yyyy-mm-dd hh:MM:ss时区”的日期(即“ 2018-09-21 16:00:00 -0500”),使用代码时:

var d = new Date("2018-09-21 16:00:00 -0500")

调试显示了我

  

d =无效日期

我正在尝试将日期重新设置如下,

var days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];


var day = days[d.getDay()];
var hh = d.getHours();
var mm = d.getMinutes()

if(hh < 10) {hh = "0"+hh}
if(mm < 10) {mm = "0"+mm}

return day+" "+hh+mm

格式化该日期的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

  • 您想将yyyy-mm-dd hh:MM:ss timezone的字符串值解析为日期对象。

如果我的理解正确,那么这个答案如何?我认为您的情况有几个答案。因此,请将此视为其中之一。

看到格式时,我认为RFC3339接近格式。那么下面的流程呢?

  1. 分隔值。2018-09-21 16:00:00 -0500是一个空格。
  2. 将分割后的值的第一个和第二个元素加入“ T”。
  3. 在连接的值中添加最后一个元素。

为此流程使用2018-09-21T16:00:00-0500时,该值将转换为yyyy-mm-dd hh:MM:ss timezone。可以用作RFC3339类型。通过此流程,var str = "2018-09-21 16:00:00 -0500"; // yyyy-mm-dd hh:MM:ss timezone var ar = str.split(" "); // Added var str = ar.slice(0, 2).join("T") + ar[2]; // Added: Here str is "2018-09-21T16:00:00-0500". var d = new Date(str); var days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; var day = days[d.getDay()]; var hh = d.getHours(); var mm = d.getMinutes() if(hh < 10) {hh = "0"+hh} if(mm < 10) {mm = "0"+mm} Logger.log(day+" "+hh+mm) // Added return day+" "+hh+mm 可以解析为日期对象。

示例脚本:

模式1:

反映上述流程的示例脚本如下。

Utilities.formatDate()
模式2:

作为另一种模式,该脚本怎么样?在Google Apps脚本中,您还可以使用var str = "2018-09-21 16:00:00 -0500"; var ar = str.split(" "); var r = ar.slice(0, 2).join("T") + ar[2]; var d = new Date(r); var res = Utilities.formatDate(d, Session.getScriptTimeZone(), "E hhmm").toUpperCase(); Logger.log(res)

yyyy-mm-dd hh:MM:ss timezone

注意:

  • 如果格式不同于push,则可能无法使用此脚本。请注意这一点。

参考:

如果我误解了你的问题,对不起。

答案 1 :(得分:1)

您的日期非常接近ISO!我将从转换为ISO开始。对于您想要的,您不需要时区,因此,如果我们忘记了它,生活将会变得更加简单...

var parts = '2018-09-21 16:00:00 -0500'.split(' ');
var myDate = new Date(parts[0] + 'T' +  parts[1] + 'Z');
console.log(myDate)

// Now serialize...

var nearlyThere = myDate.toLocaleDateString(
    'en-EN',
    {timeZone:'UTC', weekday:'short',hour:'2-digit',minute:'2-digit',hour12:false }
)
console.log(nearlyThere.replace(' ','').replace(':',' ').toUpperCase())