我的日期格式为“yyyy-mm-dd hh:MM:ss timezone”(即“2018-09-21 16:00:00 -0500”),使用代码时:
var d = new Date("2018-09-21 16:00:00 -0500")
调试告诉我
d = Invalid Date
我正在尝试按如下方式重新格式化日期,
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
格式化此日期的最佳方式是什么?
最佳答案
- 您想要解析
yyyy-mm-dd hh:MM:ss timezone
的字符串值作为日期对象。
如果我的理解是正确的,这个答案怎么样?我认为针对您的情况有几个答案。所以请将此视为其中之一。
当我看到这个格式时,我以为 RFC3339与格式接近。那么下面的流程怎么样?
- 将值除以
- 用“T”连接分割值的第一个和第二个元素。
- 将最后一个元素添加到连接值中。
何时 2018-09-21 16:00:00 -0500
用于此流程,该值将转换为2018-09-21T16:00:00-0500
。这可以用作 RFC3339 类型。通过此流程,yyyy-mm-dd hh:MM:ss timezone
可以解析为日期对象。
示例脚本:
模式 1:
反射(reflect)上述流程的示例脚本如下。
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
模式 2:
作为另一种模式,这个脚本怎么样?在 Google Apps 脚本中,您还可以使用 Utilities.formatDate()
.
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
不同,这个脚本可能无法使用。请注意这一点。
引用:
如果我误解了你的问题,我很抱歉。
关于javascript - 如何在 Google Apps 脚本中格式化 "2018-09-21 16:00:00 -0500"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419046/