我有一个格式为“ 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
格式化该日期的最佳方法是什么?
答案 0 :(得分:3)
yyyy-mm-dd hh:MM:ss timezone
的字符串值解析为日期对象。如果我的理解正确,那么这个答案如何?我认为您的情况有几个答案。因此,请将此视为其中之一。
看到格式时,我认为RFC3339接近格式。那么下面的流程呢?
分隔值。2018-09-21 16:00:00 -0500
是一个空格。为此流程使用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
可以解析为日期对象。
反映上述流程的示例脚本如下。
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())