Ect*_*opy 2 datetime datejs momentjs spservices sharepoint-online
现在,我正在尝试将以人类可读格式编写的日期解析为SharePoint列表将接受的DateTime字符串.为了做到这一点,我已经确定我需要一个类似于ISO的格式的String,如下所示:2007-08-20T00:00:00Z.似乎SharePoint只接受UTC中没有包含毫秒的DateTimes(无论出于何种原因,SharePoint会出现错误,并且当您包含毫秒时不会接受DateTime),所以我需要将本地时间转换为UTC时间之前将其转换为ISO字符串.
这是以下代码使用的过程.
我确信必须有一种更优雅/更有效的方法来实现这一目标,而不是将3个不同的库拼接在一起.我只是不确定它是什么.
var jScriptStartDate = Date.parse("6/29/2014 8:30am"); //JS Date
var jScriptStartDateUTC = moment(jScriptStartDate).utc(); //local date to UTC.
var startDate = $().SPServices.SPConvertDateToISO({ //Sharepoint ISO 8601 format
dateToConvert: jScriptStartDateUTC,
dateOffset: "" //Sharepoint dates only accept UTC times, aka no dateOffset.
});
newItem.set_item('EventDate', startDate); //EventDate is internal for StartTime
Run Code Online (Sandbox Code Playgroud)
moment('6/29/2014 8:30am','M/D/YYYY h:mma').toISOString()
Run Code Online (Sandbox Code Playgroud)
这假设了以下所有内容:
源值位于用户的时区(即运行JavaScript代码的计算机的时区)
输入将始终采用指定的格式
还值得一提的是,如果你在"am"之前放置一个空格,那么大多数现代浏览器都可以在没有任何库的情况下本地执行此操作:
new Date('6/29/2014 8:30 am').toISOString()
Run Code Online (Sandbox Code Playgroud)
如果采用这种方法,请认识到日期部分是根据用户区域设置排序的,可能是m/d/y,或者是d/m/y或y/m/d.
另外,你在标题中说"......没有毫秒",但在你的问题中没有详细说明.我相当肯定你可以毫无问题地通过毫秒.你没有充分的理由去除它们.但是,如果你必须,那么就像这样:
moment('6/29/2014 8:30am','M/D/YYYY h:mma').utc().format('YYYY-MM-DD[T]HH:mm:ss[Z]')
Run Code Online (Sandbox Code Playgroud)