2012-03-01 119 views
33

日期選擇器返回的日期已關閉一天。這是我的代碼中的問題還是它的錯誤?datepicker截止日期

發送到date_picker的日期是2012-03-21。通過日期選擇器返回的日期是星期二3月20日2012年

var end_date = end_calendar.getFormatedDate("%Y-%m-%d"); 
    end_date = $.datepicker.formatDate('D M dd yy', new Date(end_date)); 
+0

你確定這是與datepicker相關的嗎? 'document.write(new Date('2012-03-21'))'爲我打印'Tue Mar 20 2012 20:00:00 GMT-0400(Eastern Daylight Time)'。閏年錯誤? – 2012-03-01 01:32:02

+0

與格式化有關的東西,請查看:http://jsfiddle.net/fkSC5/將'2012-03-21'和'2012/03/21'傳遞給'Date()'給出的結果是4相隔數小時。 – 2012-03-01 01:38:58

+0

的確如此。新日期('...')關閉一天。 – user823527 2012-03-01 01:57:02

回答

16

似乎是一個錯誤。如果發送到Date()的字符串被格式化爲2012/03/21而不是2012-03-21。日期似乎正確。

+0

謝謝@ user823527 – Sohail 2016-11-30 05:02:38

0

檢查拼寫的.getFormatedDate並將其更改爲.getFormattedDate 這是一個微不足道的變化,但調整它,看看有沒有固定的結果。

21

它不是日期選擇器,

console.log(new Date('2012-03-21')); //prints Tue Mar 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time) 

JavaScript的Date對象可以接受以下語法如下之一,

  1. 新日期()
  2. 新日期(毫秒)
  3. new Date(dateString)
  4. new Date(year,month,day [,hour,minute,secon d,毫秒])

所以在你的情況下,它會打電話給dateString和parse。因此,嘗試追加時間如下,

new Date ('2012-03-21T00:00:00') //should return you Wed Mar 21 2012 

DEMO

或不如如下使用,

new Date (2012, 2, 21). 

- 代表年份的整數值。爲了兼容(爲了避免Y2K問題),你應該總是指定年份;使用1998,而不是98.

month - 整數值表示月份,從1月份的0開始到12月份的11月份。

day - 整數值表示月份的日期(1-31)。

+1

您能否對我上面的評論發表任何看法?爲什麼'new Date('2012-03-21)'返回一個具有'20:00:00'的日期形式的時間並且是錯誤的一天,正如您在帖子的第一行中所述的那樣? – 2012-03-01 01:44:10

+2

@Madmartigan我正在嘗試自己理解。看起來新日期('2012-03-21T00:00:00')的結果與新日期('2012/03/21')相同。但我沒有任何解釋,如果使用/默認時間00:00:00 – 2012-03-01 01:52:38

+0

你可能會認爲http://stackoverflow.com/a/33494882/533426 – Toskan 2015-11-03 08:54:43

11

您可以將差異添加到基本上忽略時區的日期。

d.setTime(d.getTime() + d.getTimezoneOffset()*60*1000); 
+0

感謝您在這裏的答案幫助http://stackoverflow.com/questions/32469269/javascript-date-give-wrong-date-off-by-one -hour只是使用減號「-',我使用當前時間來獲得時區偏移,就像這樣'd.setTime(d.getTime() - new Date()。getTimezoneOffset()* 60 * 1000);' – Youssef 2015-09-09 20:45:53

7

我不知道這是爲什麼可行,但我發現是否使用正斜槓或破折號影響答案。看一看。

new Date ('2012/03/21'); // returns: "Wed Mar 21 2012 00:00:00 GMT-0500 (CDT)" 
new Date ('2012-03-21'); // returns: "Tue Mar 20 2012 19:00:00 GMT-0500 (CDT)" WHA! 

因此,要解決我的問題,我把我的日期輸入一個簡單的正則表達式來隨時更換前三個破折號和斜槓。

var strInputValue = control.value, // <-- get my date string 
    dteCurrent; 

strInputValue = strInputValue.replace(/-/, '/') // replace 1st "-" with "/" 
          .replace(/-/, '/'); // replace 2nd "-" with "/" 

dteCurrent = new Date(strInputValue); 

我做了,爲什麼會發生這種事,並沒有回答一個非常快谷歌搜索。但是這應該解決你的問題。你所要做的就是用正斜槓替換破折號,然後將它們傳遞到你想要的地方。

編輯:對不起,我發佈前沒有注意到已經接受的答案,請忽略此答案。

+0

One問題評論的正確解釋了爲什麼會出現這種情況。格式差異似乎決定了Date將UTC的某些值假設爲零,而當您使用正斜槓 – fayyazkl 2016-11-15 07:46:53

+0

它不適用於我時。即使我替換 - 與/,輸出是相同的.. – amidstCloud 2017-04-17 18:17:32

4

這就是差異時區與日期格式 - YYYY-MM-DD

new Date ('2015/07/10'); // returns: "Fri Jul 10 2015 00:00:00 GMT-0700 (Pacific Daylight Time)" 

new Date ('2012-07-10'); // returns: "Thu Jul 09 2015 17:00:00 GMT-0700 (Pacific Daylight Time)" 

yyyy/mm/dd發生因 - 不考慮時區而計算本地時間。但
yyyy-mm-dd - 正在考慮時間,而本地計算在java腳本日期函數中的時間。
當客戶端(瀏覽器)和服務器時區不同並且時區/日期相差1天時,這可以重現。

您可以在時間間隔b/w> 12小時的不同時區更改時間,以便在機器上試用此功能。

0

我沒有評論的聲望,但Venu M給了我很好的見解。根據我的日期輸入的語法,我的項目有同樣的問題,日期作爲輸入返回或關閉一天。展開並查看完整日期格式,根據語法,我的不同輸入日期格式將在UTC或我的本地時區返回。我使用Moment JS解析我的日期,然後返回一個日期對象用於Breeze驗證。我有一個輸入模式或一個表格在編輯,所以現在我需要確保兩個解析和驗證相同。我建議驗證您的日期對象是以相同的方式創建的,無論其輸入語法或輸入位置如何。

1
var myDate = $.datepicker.parseDate("yy-mm-dd", "2013-10-21"); 
..//do whatever with myDate now 
0

遇到同樣的問題,並登陸此頁面上後,它在我的情況下,原來它是由天無效標籤引起的。我在星期一開始一週,而不是星期天。我希望這有助於某人。

1

嘗試多種解決方案下面的代碼爲我工作從(https://stackoverflow.com/a/14006555/1736785

function createDateAsUTC(date) { 
    return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds())); 
} 
4

大多數此頁面上的答案是迷茫,包含一些錯誤信息,拍攝完成後。

真正的問題是如何javascript Date對象分析日期字符串。

我發現的最佳答案是this stack-O answer。看看它的優秀報道。

下面是從上面提到的答案非常相關的評論。 (來源:@Mizstik)

所有這一切都是由於潛在的Date.parse()試圖按照ISO 8601當日期字符串使用YYYY-MM-DD格式的行爲,它的假設以隱含的UTC 00:00爲ISO 8601。當字符串偏離格式(例如mm-dd-yyyy或斜線而不是連字符)時,它會回落到根據RFC 2822的鬆散分析器,該分析器在時區不存在時使用本地時間。無可否認,這對於一般人來說都是相當神祕的。