生成一个类似于Google Tasks API的RFC 3339时间戳
Generate an RFC 3339 timestamp similar to Google Tasks API?
我正在构建一个与谷歌任务同步的应用程序。作为同步的一部分,我想比较本地任务和API任务,看看哪一个最近更改了。
来自Google API的每个任务都包含一个updated
属性,如下所示:
2011-08-30T13:22:53.108Z
现在我想生成一个类似的时间戳,这样每次我在我的应用程序上更新任务时,它都会设置一个新的updated
值。为了生成RFC 3339时间戳,我使用- http://cbas.pandion.im/2009/10/generating-rfc-3339-timestamps-in.html生成如下内容:
2011-08-30T09:30:16.768-04:00
问题是,API日期总是返回为"大于"本地日期,即使本地日期较新。我猜这与两者之间不同的格式有关。
这里有两个日期,顶部是来自Google Tasks API(大约10分钟前),底部是一分钟前本地生成的。当比较哪个更大时,它告诉我最上面的是。
2011-08-30T13:22:53.108Z
2011-08-30T09:41:00.735-04:00
我的格式有问题吗?我哪里做错了?
似乎已经给出了很多复杂的答案,但这工作得很好,不是吗?
new Date().toISOString()
格式是ISO所以new Date().toISOString()
会给你的形式。当我正在阅读时,可能需要显示:
/* use a function for the exact format desired... */
function ISODateString(d){
function pad(n){return n<10 ? '0'+n : n}
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z'}
var d = new Date();
print(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z
来源:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
我发现moment.js库非常适合在javascript中处理时间。moment().format()
以Google API对datetime
期望的格式产生时间戳。或者,为了不依赖于您的应用程序的默认格式是否正确,
moment().format("YYYY-MM-DDTHH:mm:ssZ")
所有字符串选项(包括小数秒,如果你需要的话):http://momentjs.com/docs/#/displaying/format/
如果你使用的是Google Script,另一个选择是使用Utilities。formatDate URL如下:
https://developers.google.com/apps-script/reference/utilities/utilities formatDate(日期字符串,字符串)
上面URL的示例代码:
// This formats the date as Greenwich Mean Time in the format
// year-month-dateThour-minute-second.
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
使用date-fns
,这是非常优雅的:
import { formatRFC3339 } from 'date-fns'
const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52))
//=> '2019-09-18T19:00:52Z'
源:try this:
Date.prototype.setRFC3339 = function(dString) {
var utcOffset, offsetSplitChar;
var offsetMultiplier = 1;
var dateTime = dString.split("T");
var date = dateTime[0].split("-");
var time = dateTime[1].split(":");
var offsetField = time[time.length - 1];
var offsetString;
offsetFieldIdentifier = offsetField.charAt(offsetField.length - 1);
if (offsetFieldIdentifier == "Z") {
utcOffset = 0;
time[time.length - 1] = offsetField.substr(0, offsetField.length - 2);
} else {
if (offsetField[offsetField.length - 1].indexOf("+") != -1) {
offsetSplitChar = "+";
offsetMultiplier = 1;
} else {
offsetSplitChar = "-";
offsetMultiplier = -1;
}
offsetString = offsetField.split(offsetSplitChar);
time[time.length - 1] == offsetString[0];
offsetString = offsetString[1].split(":");
utcOffset = (offsetString[0] * 60) + offsetString[1];
utcOffset = utcOffset * 60 * 1000;
}
this.setTime(Date.UTC(date[0], date[1] - 1, date[2], time[0], time[1], time[2]) + (utcOffset * offsetMultiplier));
return this;
};
来源:http://blog.toppingdesign.com/2009/08/13/fast rfc - 3339 -日期-处理- javascript/
第一个日期后面的Z表示它是UTC(祖鲁)时间,没有Z将使用本地(计算机)时间,这可能是几个时区。
见:http://en.wikipedia.org/wiki/UTC
看起来更漂亮了:new Date().toISOString().split('.')[0] + 'Z'
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- API密钥使用和检查示例
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 谷歌地图JS API+JSON-多个标记没有显示
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 如何在 API 调用后和 if 语句中启用提交按钮
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 搜索api在mac上显示对话框
- Backbone.js restful json API design
- 标记的实时更新,无需加载页面谷歌地图API V3
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- 对API数据使用声明性绑定
- 生成一个类似于Google Tasks API的RFC 3339时间戳