3

当我这样做时,new Date()我得到:

Thu Dec 28 2017 10:17:58 GMT+0800 (台北標準時間)

如果我.valueOf()在那个日期申请,我会得到:

1514427724039

这就是我想要的。

现在,我需要申请.valueOf()这样的日期:2017/12/28. 我尝试使用Luxon转换日期(因为适用.valueOf()于 YYYY/MM/DD 不会产生数字):

DateTime.fromISO(startDate.replace(/\//g, '-')).toRFC2822()
// => Thu, 28 Dec 2017 00:00:00 +0800

但是,应用valueOf()该结果会返回相同的字符串。不是第一个示例中的数字。

我应该怎么做才能产生一个数值YYYY/MM/DD?只是我做了DDD MMM DD YYYY GMT+0800 (X country standard time)

4

3 回答 3

5

我认为您正在忘记类型。

fromISO()返回 Luxon DateTime 对象,但toRFC2822返回日期的 RFC 2822 字符串表示。

所以你valueOf()是在字符串上调用的,而不是 DateTime。

正如其他人指出的那样,您只需要调用valueOf().fromISO()

为了显示:

var dt = luxon.DateTime.fromISO('2017-12-05'); // returns a Luxon DateTime object
console.log('fromISO returns an', typeof dt);

var rfc = dt.toRFC2822(); // returns a string
console.log('toRFC2822 returns a', typeof rfc);

var valueOfRFC = rfc.valueOf(); // string.valueOf() is just that string
console.log('strings are their own values?', rfc === valueOfRFC);

var valueOfDT = dt.valueOf(); // this is what you want
console.log('value of datetime', valueOfDT);
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

于 2017-12-29T01:37:05.780 回答
2

如果您想使用 Luxon,您可以:

var startDate = '2017/12/28';
var DateTime = luxon.DateTime;
// fromISO with regex
console.log( DateTime.fromISO(startDate.replace(/\//g, '-')).valueOf() );
// fromString instead of regex
console.log( DateTime.fromString(startDate, 'yyyy/MM/dd').valueOf() );
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

如果你想使用 momentjs(Luxon 的“老大哥”),你可以简单地使用moment(String, String)

var startDate = '2017/12/28';
console.log( moment(startDate, 'YYYY/MM/DD').valueOf() );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.js"></script>

默认情况下,luxon 和 moment 都将字符串解析为本地时间。


您还可以使用原生 JavaScript,请参阅Date

  • new Date(year, month, day)参数月份是从0开始的
  • new Date(dateString)(符合 IS0 8601 的格式,例如 2017-12-28。在 Firefox <=3 和 IE <=8 上不受支持)

var startDate = '2017/12/28';
var arr = startDate.split('/');
console.log( new Date(arr[0], arr[1]-1, arr[2]).valueOf() );
console.log( new Date(startDate.replace(/\//g, '-')).valueOf() );

请注意:

注意:由于浏览器的差异和不一致,强烈建议不要使用构造函数解析日期字符串Date(并且Date.parse它们是等效的)。仅按惯例支持 RFC 2822 格式字符串。支持 ISO 8601 格式的不同之处在于仅日期字符串(例如“1970-01-01”)被视为 UTC,而不是本地。

于 2017-12-28T21:58:28.733 回答
1

Date对象将按原样接受 YYYY/MM/DD 字符串。从那里,您可以使用.getTime()获取时间戳:

var startDate='2017/12/28'; 
var dateStamp = new Date(startDate); // e.g. "Thu Dec 28 2017 00:00:00 GMT-0600 (Central Standard Time)"
var timeStamp = dateStamp.getTime(); // e.g. 1514440800000
于 2017-12-28T02:32:07.567 回答